场景: Linux Ubuntu18.04下很久没有更新Golang1.10.x版本,升级1.13.x后发现改动有些有趣,需要更换一下我的打开方式。
环境:
- Linux Ubuntu 18.04
- Golang 1.13.10 linux/amd64
Golang升级安装
先记录一下Golang升级安装过程以防失忆:
// remove old version rm -rf /usr/local/go // install
wget -c https://dl.google.com/go/go1.13.10.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
环境变量配置
vim ~/.bashrc
// v1.10.x+ 标配 export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$GOPATH/bin:$GOROOT/bin:$PATH // v1.13.x 新版需再加入 // 必加 export GOPROXY=http://goproxy.cn,direct export GO111MODULE="on" // 可选 export GOBIN=$HOME/go/bin
source ~/.bashrc
GO111MODULE :
- auto : 自 1.11 实验性加入之后就是默认值。auto 意味着由工具链自动判断是否启用 go modules。在 1.13 以前的启用条件是『项目根目录有 go.mod 且项目不在 GOPATH 内』,1.13+ 去掉了 『不在 GOPATH 内的限制』,也就是只要有 go.mod 就会启用。
- on : 如果你觉得上面这段话太长懒得看,或者害怕以后启用条件还会变,那么 1.13 已经准备好全面启用 go modules,直接设为 on 就好了。设为 on 之后无条件启用 go modules。
- off : 关闭 go modules,回到 GOPATH 时代。
GOPROXY :
国内环境必备,原因你懂的。甚至可以说这是新版本为中国开发者做出的最大改进之一也不为过。在 dep 的时代是靠自建的代理熬过来的,那么不会代理的朋友就很麻烦了。改用镜像就友好太多了。
https://goproxy.cn,direct
GOBIN :
$GOPATH/bingo getgo install
我为了保持使用习惯,设置了跟($HOME/go)默认相同的目录,区别只是这个值不依赖 GOPATH 的值。
go env
bear@k40:~$ go env GO111MODULE="on" GOARCH="amd64" GOBIN="/home/bear/go/bin" GOCACHE="/home/bear/.cache/go-build" GOENV="/home/bear/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/bear/go" GOPRIVATE="" GOPROXY="http://goproxy.cn,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/dev/null" 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 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build545380314=/tmp/go-build -gno-record-gcc-switches"
项目开工的方式
$GOPATH/src
mkdir [projectname] cd [projectname]
and create go.mod
// Two Methods // 1. 项目本地目录 go mod init <project_name> // 2. 引入github目录,这样的话托管至github后以后go build本地找不到包会从github拉取 go mod init github.com/kumataahh/<project_name>
后续pkg的依赖需要按照以上指定路径加入:
// Example: import pkg config in user package user import ( "github.com/kumataahh/<project_name>/config" )
随着开发的进行,还会自动生成 go.sum 文件,记录依赖的校验信息。
注意 go.sum 不是 lock 文件 ,重现构建的信息已经包含在 go.mod 里,go.sum 属于 checksum 文件 ,用来 确保下载的依赖没有被篡改 。
go modgo help mod
https://jaycechant.info/2020/setup-golang-env-for-1-13-and-above/