1. 程式人生 > >二、Go學習筆記:HelloWorld示例及工作目錄

二、Go學習筆記:HelloWorld示例及工作目錄

瞭解GOPATH目錄下的目錄結構 ,對於初學者而言只需瞭解src就行。

|- WorkSpace
  |- src
  |- pkg
  |- bin

本系列學習筆記部分改編自Go語言中文網,其中的教程是翻譯自國外教程,其中有一些語句翻譯不通難以理解。故對其進行整理並在本系列教程中加入了自己的理解和程式碼示例。

Hello World

不管三七二十一,我們先編寫一個可以執行的go程式,以經典的世界 你好!程式為例,找點成就感,然後再來介紹工作區中各個資料夾的作用。

1.在工作區(GOPATH)目錄中建立src目錄,這個目錄就時存放Go專案所有原始碼的地方

2.在src目錄中新建一個hello

資料夾,這個資料夾可以理解為就是我們的專案目錄(假設我們這裡要做的是一個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, 與資料夾名保持一致,不一致也是可以,但在使用上不太方便。例如資料夾名為print,而packageprinthello, 這時編譯後生成的檔案的名字叫print.a, 引用這個檔案寫法為import "print",也沒問題,但是使用具體方法時就成了printhello.Print()了,十分混亂,總之就是保持一致就好。

工作空間的介紹就到這裡了,上面只是簡單的介紹,深入理解可以自己再google一下。不知不覺中,我們同時還學會了兩個go命令go rungo install

  1. go run
    用來執行含有main函式的go檔案的,隨便在哪個位置建立一個go檔案,都可以使用go run來執行,無關乎工作空間。
  2. go install
    用來編譯專案生成編譯檔案的,如果是有main入口的專案就會生成二進位制可執行檔案到bin目錄下,如果沒有main入口,一般情況下就會生成一個.a檔案到pkg目錄下。

多扯一點,個人覺得GOROOT與GOPATH本質上是類似的,GOROOT是存放go語言自己的相關檔案,而GOPATH是存放我們自己寫的或第三方專案相關檔案。在GOROOT中同樣有src,bin,pkg這三個資料夾。