背景
移植完了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 get
和go install
go get
go get会做两件事:
- 从远程下载需要用到的包
- 执行go install
go install
go install 会生成可执行文件直接放到bin目录下,当然这是有前提的
你编译的是可执行文件,如果是一个普通的包,会被编译生成到pkg目录下该文件是.a结尾