跳至主要内容

[Golang] CLI

$ go run <file.go>      # 編譯並執行
$ go run *.go # 等同於 go run .
$ go run -race main.go # 檢查有沒有 race condition 存在

$ go get <package_path> # 下載他人 package 的 source code
$ go get -u # 更新專案中的所有套件
$ go build # 編譯後放在 src 中的專案資料夾中
$ go build ./... # 編譯 module 資料夾中的所有內容
$ go install # 編譯後放置到 bin 資料夾中

$ go test # runs any tests associated with the current project
$ go test ./... # 對 module 資料夾中的所有測試檔案執行測試

$ go fmt # format 該資料夾中的所有檔案

$ cd $GOPATH
$ go env # 檢視 GOPATH GOROOT 等和 GO 有關的變數
$ go env GOPATH # 檢視當前設定的 GOPATH
$ go env -w GOPATH=/somewhere/else/bin # 設定環境變數

go install:將 go 程式碼編譯後存放在 GOBIN 中

透過 go install <package_path> 會將 go 程式碼進行編譯後,存放在 GOPATH 或 GOBIN 中。如果 GOBIN 有進行設定,執行檔(binaries)會安裝在該資料夾中;如果 GOPATH 有設定,而 GOBIN 沒有設定的話,執行檔則會安裝在 GOPATH/bin 資料夾中。

預設的情況下,GOPATH 的路徑會是 $HOME/go

為了方便起見,go 的指令接受「相對於工作目錄(working directory)的相對路徑」,預設則是「當前工作目錄中的 package」:

# 若我們在 module_path 為 example.com/user/hello 的資料中,下面指令的效果皆相同
# go install <module_path>
$ go install example.com/user/hello
$ go install .
$ go install

go get:安裝套件

使用時機:

  • 安裝執行檔
  • 檢視原始碼

下載他人 package 的 source code:

  • source code 會放在 ~/go/src 資料夾中
  • 如果裡面有 main 檔則自動變成編譯後的執行檔,放在 ~/go/bin 資料夾中
$ go get github.com/go-training/drone-golang-example

# -u,update local package,"..." 表示下載裡面的所有東西
$ go get -u -d github.com/inancgumus/learngo/...

⚠️ go get 永遠會抓最新的版本,無法指定特定的套件版本

go build:將專案程式碼進行打包

# build 時帶入不同的環境變數,即可打包成不同作業系統下的執行檔
$ GOOS=darwin go build # OSX
$ GOOS=windows GOARCH=386 go build # Microsoft
$ GOOS=linux GOARCH=arm GOARM=7 go build # Linux

其他可打包的作業系統和環境變數可以參考 Source#Environment

參考