你好,Go
在開始編寫應用之前,我們先從最基本的程序開始。就像你造房子之前不知道什麼是地基一樣,編寫程序也不知道如何開始。因此,在本節中,我們要學習用最基本的語法讓Go程序運行起來。
程序
這就像一個傳統,在學習大部分語言之前,你先學會如何編寫一個可以輸出hello world
的程序。
準備好了嗎?Let's 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的發明者之一),所以它天生支持多語言。