二、Go學習筆記:HelloWorld示例及工作目錄
瞭解GOPATH目錄下的目錄結構 ,對於初學者而言只需瞭解src就行。
|- WorkSpace
|- src
|- pkg
|- bin
本系列學習筆記部分改編自Go語言中文網,其中的教程是翻譯自國外教程,其中有一些語句翻譯不通難以理解。故對其進行整理並在本系列教程中加入了自己的理解和程式碼示例。
Hello World
不管三七二十一,我們先編寫一個可以執行的go程式,以經典的世界 你好!
程式為例,找點成就感,然後再來介紹工作區中各個資料夾的作用。
1.在工作區(GOPATH)目錄中建立src
目錄,這個目錄就時存放Go專案所有原始碼的地方
2.在src
目錄中新建一個hello
世界 你好!
)
3.在hello目錄中新建helloworld.go
檔案, 並編寫以下內容,main函式就是程式執行的入口, 且必須宣告package包名為main。
package main
import "fmt"
func main() {
fmt.Println("世界 你好!")
}
4.在命令列中進入相應目錄,執行go run helloworld.go
即可看到相應的輸出。
D:\WorkSpace\src\hello> go run helloworld.go 你好 世界!
整體的目錄結構如下
|- WorkSpace
|- src
|- hello
|- helloworld.go
工作目錄中的子目錄
src
source,需要我們自己在工作空間中手動建立。顧名思義,src就是存放原始碼的位置,一般來說我們會在其中新建一個資料夾代表一個專案。就比如說我們上面新建了一個hello資料夾,代表hello專案。我們可以新建多個資料夾代表多個專案, 也可以在其中建立子資料夾,代表專案的子模組。
bin
binary, 由go進行自動建立。存放go編譯後生成的二進位制可執行檔案,上面我們執行的go run helloworld.go
只是執行,並不會生成可執行檔案,怎麼生成可執行檔案呢?
1.在hello目錄中使用go install
, 相當於是編譯當前所在位置的專案,go會自動查詢main函式並生成可執行檔案放到bin目錄下,如果同級目錄發現有多個main函式,則會報錯,也就是說一個專案只能有一個main函式入口。
2.在src
目錄下使用go install hello
命令,相當於是指定編譯hello這個專案,同上
windows下生成的是hello.exe
, Mac與Linux系統會生成hello
檔案,名字是以我們的專案名(也就是資料夾名字)來確定的。可以在命令列中執行該檔案,同樣會有輸出。
D:\WorkSpace\bin>hello
你好 世界!
pkg
package, 同樣是存放編譯原始碼生成的檔案, 不過是存放不可以直接執行的檔案。我們在src目錄下新建一個專案(資料夾)print
,在其中新建printHelloWorld.go
檔案,內容如下,這個程式沒有main函式,所以是不可以直接執行的程式。
package print
import "fmt"
func Print() {
fmt.Println("Hello World!")
}
這時我們編譯這個專案,在當前目錄使用go install
或者在src目錄下使用go install print
,會發現在工作區中生成了pkg資料夾,pkg資料夾下又生成了一個平臺資料夾,這個資料夾中生成了print.a
檔案,這個檔案是不可以直接執行的。個人更喜歡將之稱為存放依賴檔案的位置。
在不同的平臺編譯,生成的資料夾不同,以windows平臺生成的結構為例
|- WorkSpace
|- pkg
|- windows_amd64
|- print.a
在上面的程式碼中宣告其所屬包為print, 與資料夾名保持一致,不一致也是可以,但在使用上不太方便。例如資料夾名為
package
為printhello
, 這時編譯後生成的檔案的名字叫print.a, 引用這個檔案寫法為import "print"
,也沒問題,但是使用具體方法時就成了printhello.Print()
了,十分混亂,總之就是保持一致就好。
工作空間的介紹就到這裡了,上面只是簡單的介紹,深入理解可以自己再google一下。不知不覺中,我們同時還學會了兩個go命令go run
與go install
go run
用來執行含有main函式的go檔案的,隨便在哪個位置建立一個go檔案,都可以使用go run
來執行,無關乎工作空間。go install
用來編譯專案生成編譯檔案的,如果是有main入口的專案就會生成二進位制可執行檔案到bin目錄下,如果沒有main入口,一般情況下就會生成一個.a
檔案到pkg目錄下。
多扯一點,個人覺得GOROOT與GOPATH本質上是類似的,GOROOT是存放go語言自己的相關檔案,而GOPATH是存放我們自己寫的或第三方專案相關檔案。在GOROOT中同樣有src,bin,pkg這三個資料夾。