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/

 

posted @ 2020-04-17 17:37  kumata  阅读(1091)  评论(0编辑  收藏  举报