package main
import "fmt"
func main() {
fmt.Printf("Hello, world")
}
首先我們要了解一個概念,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 中的任何字元作為識別符號。
package 是一包function的結合