Golang:GOROOT、GOPATH、GOBIN變量的含義


背景

移植完了go以后,在配置變量的時候不太清楚這些變量的含義,找了有關的資料。

使用 go env可以獲取 go 有關的環境變量,下面是我的go環境:

GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/schips/.cache/go-build"
GOENV="/home/schips/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/schips/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/schips/host/go/install/go_arm"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/schips/host/go/install/go_arm/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="0"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build637868665=/tmp/go-build -gno-record-gcc-switches"

GOPATH

go 命令依賴一個重要的環境變量:$GOPATH

GOPATH允許多個目錄,當有多個目錄時,請注意分隔符,多個目錄的時候Windows是分號`;

當有多個GOPATH時默認將go get獲取的包存放在第一個目錄下。

GOPATH 目錄約定有三個子目錄

  • src存放源代碼(比如:.go .c .h .s等) 按照golang默認約定,go run,go install等命令的當前工作路徑(即在此路徑下執行上述命令)。
  • pkg編譯時生成的中間文件(比如:.a)  golang編譯包時
  • bin編譯后生成的可執行文件(為了方便,可以把此目錄加入到 $PATH 變量中,如果有多個gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目錄)

代碼目錄結構規划

GOPATH下的src目錄就是接下來開發程序的主要目錄,所有的源碼都是放在這個目錄下面,那么一般我們的做法就是一個目錄一個項目

例如: $GOPATH/src/mymath 表示mymath這個應用包或者可執行應用,這個根據package是main還是其他來決定,main的話就是可執行應用,其他的話就是應用包。

GOROOT

其實就是golang 的安裝路徑。

GOBIN

與 GOBIN 有2個非常好用的命令:go getgo install

go get

go get會做兩件事:

  1. 從遠程下載需要用到的包
  2. 執行go install

go install

go install 會生成可執行文件直接放到bin目錄下,當然這是有前提的
你編譯的是可執行文件,如果是一個普通的包,會被編譯生成到pkg目錄下該文件是.a結尾


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM