在 Go 1.13 之後,官方提供了套件管理功能 Go Module,同時也寫了一篇指南 Tutorial: Create a Go module。
我們可以用 go mod init olivine 在專案根目錄下初始化,它會自動生成 go.mod 檔案。
註:許多的專案會使用
github.com/{username}/{repo_name}這樣格式的 module 名稱,這可以讓其它開發者很快知道它來自於哪個 GitHub 儲存庫,對於函式庫類型的專案相當合適。
main 函式main 函式被視為程式的進入點,這個邏輯與 C/C++ 或 Java 相當類似。
file: ./cmd/olivine/main.go
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
可以使用 go run ./cmd/olivine,你應該可以看到 console 中出現 Hello World。
$ go run ./cmd/olivine
Hello World
提示:
main函式可以被放在任何 go module 底下的資料夾下,只要確保命名為package main即可;我個人習慣於把執行檔的原始碼放在./cmd/{binary_name}底下,這個思想源於 golang-standard/project-layout,雖然這並非 Go 官方的標準,但對於中大型專案而言是很好的組織方式。
Makefilemake 是一個軟體開發中常用的傳統建置工具,藉由 Makefile 定義一些指令,幫助開發者設定、編譯或清理專案。
就從一個簡單的 Makefile 開始:
# file: ./Makefile
BIN_DIR := bin
CMD_DIR := cmd
build:
@echo "Building binaries..."
@mkdir -p $(BIN_DIR)
go build -o $(BIN_DIR)/olivine ./$(CMD_DIR)/olivine
clean:
@echo "Cleaning..."
@rm -rf $(BIN_DIR)
在這個 Makefile 中,定義了兩個指令 build 與 clean:
build:將 ./cmd/olivine 的原始碼編譯成執行檔並放到 ./bin 底下,如果資料夾不存在會自動建立clean:將 ./bin 刪除現在,可以使用 make build 來編譯:
$ make build
$ ./bin/olivine
Hello World