场景: 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/