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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM