Golang 升级1.13+ 后的配置
场景: 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
。如果团队内部还有搭建私有代理,可以用 ,
隔开,go 会依次尝试。最后记得加上 direct
,让镜像上找不到的依赖回源查找。(包括但不限于 镜像还没同步,私有仓库 等情况)
GOBIN :
如果没有设置,默认值为 $GOPATH/bin
,是通过 go get
或 go install
安装的可执行文件的存放目录。不设并不影响使用,但考虑到 GOPATH 正在被边缘化,未来不知道哪个版本就取消了,所以建议还是单独设置一下比较好。
我为了保持使用习惯,设置了跟($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"
项目开工的方式
环境都配置好了,然后就可以开始第一个 go 的项目了。由于 go modules 不再依赖 GOPATH,所以项目可以放在任何地方—这个 『任何』,是指可以不是 GOPATH ,但是要是习惯了,继续放在 $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.mod 和 go.sum 需要一起提交参与版本控制 。关于 go mod
的详细用法,可以直接 go help mod
获取帮助信息以及参考这个链接:https://juejin.im/post/5c8e503a6fb9a070d878184a
参考来源:
https://jaycechant.info/2020/setup-golang-env-for-1-13-and-above/