Files
Bi-Ruei, Chiu 8efb279dcf Editorial changes for chapter 2
1. Add suitable space and colon
2. Change some parenthesis to full-width
2. Remove unnecessary numbering
2019-09-16 22:57:35 +08:00

54 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2.1 你好Go
在開始編寫應用之前,我們先從最基本的程式開始。就像你造房子之前不知道什麼是地基一樣,編寫程式也不知道如何開始。因此,在本節中,我們要學習用最基本的語法讓 Go 程式執行起來。
## 程式
這就像一個傳統,在學習大部分語言之前,你先學會如何編寫一個可以輸出 `hello world` 的程式。
準備好了嗎Let's Go!
```Go
package main
import "fmt"
func main() {
fmt.Printf("Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい\n")
}
```
輸出如下:
Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい
## 詳解
首先我們要了解一個概念Go 程式是透過 `package` 來組織的。
`package <pkgName>`(在我們的例子中是`package main`)這一行告訴我們當前檔案屬於哪個套件,而套件名 `main` 則告訴我們它是一個可獨立執行的套件,它在編譯後會產生可執行檔案。除了 `main` 套件之外,其它的套件最後都會產生 `*.a` 檔案(也就是套件檔案)並放置在 `$GOPATH/pkg/$GOOS_$GOARCH` 中(以 Mac 為例就是 `$GOPATH/pkg/darwin_amd64`)。
>每一個可獨立執行的 Go 程式,必定包含一個 `package main`,在這個 `main` 套件中必定包含一個入口函式 `main`,而這個函式既沒有參數,也沒有回傳值。
為了列印 `Hello, world...` ,我們呼叫了一個函式 `Printf`,這個函式來自於 `fmt` 套件,所以我們在第三行中匯入了系統級別的 `fmt` 套件:`import "fmt"`
套件的概念和 Python 中的 package 類似,它們都有一些特別的好處:模組化(能夠把你的程式分成多個模組)和可重用性(每個模組都能被其它應用程式反覆使用)。我們在這裡只是先了解一下套件的概念,後面我們將會編寫自己的套件。
在第五行中,我們透過關鍵字 `func` 定義了一個 `main` 函式,函式體被放在 `{}`(大括號)中,就像我們平時寫 C、C++ 或 Java 時一樣。
大家可以看到 `main` 函式是沒有任何的參數的,我們接下來就學習如何編寫帶參數的、回傳 0 個或多個值的函式。
第六行,我們呼叫了 `fmt` 套件裡面定義的函式 `Printf`。大家可以看到,這個函式是透過 `<pkgName>.<funcName>` 的方式呼叫的,這一點和 Python 十分相似。
>前面提到過,套件名和套件所在的資料夾名可以是不同的,此處的 `<pkgName>` 即為透過 `package <pkgName>` 宣告的套件名,而非資料夾名。
最後大家可以看到我們輸出的內容裡面包含了很多非 ASCII 碼字元。實際上Go 是天生支援 UTF-8 的,任何字元都可以直接輸出,你甚至可以用 UTF-8 中的任何字元作為識別符號。
## 結論
Go 使用 `package`(和 Python 的模組類似)來組織程式碼。`main.main()` 函式這個函式位於主套件是每一個獨立的可執行程式的入口點。Go 使用 UTF-8 字串和識別符號(因為 UTF-8 的發明者也就是 Go 的發明者之一),所以它天生支援多語言。
## links
* [目錄](<preface.md>)
* 上一節:[Go 語言基礎](<02.0.md>)
* 下一節:[Go 基礎](<02.2.md>)