安裝主程式
- 主程式是指 go 指令,它能處理編譯、直譯、建置、格式化程式碼、測試、下載依賴等多種工具的組合。
MacOS
1 | $ brew install go |
環境變數設定
- 可下
go env取得環境變數:
1 | $ go env |
-
其中
GOPATH,是需要設定的環境變數。 -
它代表著 go 程式的工作空間(workspace), Windows 預設會設定在
~\Go, Unix-like 則沒有預設,官方建議設定在~/go。 -
Workspace裡,劃分成三個主要目錄:- src - 原始碼
- pkg - go package
- bin - 編譯好的執行檔,有需要也可以加入 PATH 環境變數
-
接著使用 go 的第一個指令
go get,它會把目標下載回來放在src裡,如:
go get github.com/MilesChou/book-start-golang-30-days -
這樣會把上面這個 repo ,使用 HTTPS 協定 clone 到硬碟裡。
-
當編譯需要第三方的原始碼時,即可使用 go get 下載,同時這也可以用來下載自己或是第三方的原始碼。把所有原始碼集中成一個大大的 workspace ,這就是 go 管理原始碼的概念。
Hello World
1 | package main |
- 讓程式在建好的環境執行,先建個目錄,檔案名叫
main.go,切換到目錄後,將以上的內容輸入到檔案內,接著go run main.go
1 | $ mkdir -p /path/to/helloworld |
解釋
go run
1 | $ go run main.go |
go run所做的事正是直譯,也就是直接拿原始碼編譯,同時執行。
package
1 | package main |
-
package指的是定義套件名稱。 -
每個
.go原始碼開頭都必須要宣告package。 -
main套件是有特殊意義的套件名,它是程式的起始點。執行程式的時候,將會從main套件開始。 -
若把
main名字換成其他名字,再執行一次,將會出現錯誤訊息:
1 | $ go run main.go |
- 不能跑非
main的套件。這個概念與大多數 PHP 框架的index.php類似,是所有request的起始點。
import
1 | import "fmt" |
import表示要引用套件,而fmt套件是Go內建的處理格式化輸入輸出函式庫。Hello World的目的是要輸出文字,所以需要這個函式庫。
func
- 這是定義函式,也就是要寫流程了。
1 | func main() { |
-
func定義了程式流程,供其他函式呼叫使用。 -
程式碼可以看到兩個函式,一個是現正定義的
main,另一個則是fmt套件所提供的Println函式,把後面帶入的文字印出來,然後再另外加一個換行。 -
Go 語言有套件庫的概念,同時的函式也有能見度的規範。
-
Go 採用比較特別的方法:開頭大寫的函式是
public,不同的套件庫可以呼叫public func;開頭小寫的則是private,只限套件庫內部使用。 -
Println是屬於fmt套件的public func,因此雖然套件庫不同(main 與 fmt),仍然可以正常呼叫。 -
func main比較特別,它會搭配package main一起使用。 -
package main是所有程式的進入點 -
go run會把package main的func main拿出來呼叫。 -
go run main.go實際上就是執行fmt.Println("Hello, 世界")