命令列表
build compile packages and dependencies
clean remove object files
doc show documentation for package or symbol
env print Go environment information
bug start a bug report
fix run go tool fix on packages
fmt run gofmt on package sources
generate generate Go files by processing source
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet run go tool vet on packages
go build
-
如果目標包裏有 main 包,就會生成二進制文件
- 如果沒有 main 包,build 指令僅僅用來檢查編譯是否可以通過,編譯完成後會丟棄編譯時生成的所有臨時包對象
-
默認在當前目錄下生成二進制文件
- 使用
-o
參數顯式指定路徑和文件名
- 使用
-
默認作用範圍爲當前文件夾
- 也可以顯式指定目錄編譯
go build ~/go/src/github.com/xxx/xxx
...
遞歸編譯目錄下的所有包go build flysnow.org/tools/...
編譯tools目錄下的所有包
- 也可以顯式指定目錄編譯
-
-race
參數開啓競爭檢測 -
跨平臺編譯
GOOS=linux GOARCH=amd64 go build
-
條件編譯
- 只支持文件級別的條件編譯
- 方法一: 文件開頭的編譯標籤
- 編譯標籤需要和下面的包聲明(例如
package main
)用空行隔開- 否則會被視爲包聲明的註釋
- 一行內的所有條件爲或的關係
- 例如
// +build dawin freebsd
- 例如
- 每一行之間的條件爲與的關係
!
爲在該平臺不編譯// +build !linux
- 上述條件編譯時自動觸發的,我們還可以通過tag手動觸發
- 文件:
// +build jsoniter
- 命令:
go build -tag=jsoniter
- 文件:
- 編譯標籤需要和下面的包聲明(例如
- 方法二:文件後綴
- 如果你的源文件包含
_$GOOS.go
或者_$GOARCH.go
後綴,那麼這個源文件只會在這個平臺/系統下編譯 - 這兩個後綴可以結合在一起使用,但是要注意順序
_$GOOS_$GOARCH.go
- 不能反過來用
_$GOARCH_$GOOS.go
- 如果你的源文件包含
- 參考:https://blog.csdn.net/varding/article/details/12675971
go install
-
編譯並安裝文件,即比build多一個安裝的步驟
-
安裝到bin或pkg目錄下
- 含有main包文件(生成可執行文件)會被安裝到
$GOPATH/bin
目錄下 - 普通包文件(生成.a文件)安裝到
$GOPATH/pkg/$GOOS/
目錄下
- 含有main包文件(生成可執行文件)會被安裝到
-
當存在多個GOPATH目錄時,只有第一個目錄有效
go run
- 編譯和執行程序,不生成文件
- 必須要包含main函數的文件作爲參數
go get
- 獲取遠程代碼包並安裝
- 非mod模式源代碼會被下載到
$GOPATH/src
目錄下 - mod模式下源代碼會下載到
$GOPATH/pkg/mod
目錄下
- 非mod模式源代碼會被下載到
-v
顯示過程-u
強制用網絡更新-d
只下載,不安裝到/bin或/pkg- go get 會自動檢測和安裝該代碼的所有依賴包
- 爲了獲得一個項目的所有依賴,不要使用git clone,而使用go get
# 下載目錄下的所有依賴
go get -d -v ./...
go help
- 查看內置命令使用幫助
- 例如
go help build
- 例如
go env
- 不加參數即爲查看環境參數
-w
設置全局環境變量- 例如
go env -w GOBIN=$HOME/bin
- 例如
go vet
- 靜態代碼檢查