1. Add suitable space and colon 2. Change some parenthesis to full-width 2. Remove unnecessary numbering
54 lines
3.3 KiB
Markdown
54 lines
3.3 KiB
Markdown
# 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>)
|