真香系列之 Golang 升級

  • 2019 年 11 月 28 日
  • 筆記

Golang 以前的依賴管理一直飽受詬病,社區的方案也層出不窮,比如 vendor, glide, godep 等。之前的依賴管理一直是依靠 GOPATH 或者將依賴代碼下載到本地,這種方式都有劣勢。另外由於特殊的網絡環境,導致谷歌的大部分包都沒有辦法下載。從 Golang 1.11 開始,官方已內置了更為強大的 Go modules 來一統多年來 Go 包依賴管理混亂的局面,從 1.13 開始將成為默認配置。配合 Goproxy 來使用來說,真香。這次配合我之前的 Golang 開源項目 GShark 升級到 1.13,升級花費的時間不超過 5 分鐘,體驗優秀。

升級 Golang 版本

其實升級 Golang 版本是非常簡單的,只要移除之前的 Golang,然後複製新版本的 Golang 就可以了。以我之前的 VPS 為例(CentOS,親測蘋果系統可以使用同樣的方式升級),之前安裝的 Golang 版本是 1.9。

1.移除舊版本 Golang

rm -rf /usr/local/go

2.安裝新版本 Golang

wget https://dl.google.com/go/go1.13.linux-amd64.tar.gztar -C /usr/local -xzf go1.13.linux-amd64.tar.gz

3.配置 Golang 環境

如果你之前配置過 Golang 的環境,那麼你可以找直接升級。主要只是需要配置 GOROOT 以及 GOPATH 即可,對於 1.13 其實這兩個變量已經不是必要的了。不過我發現我在安裝的依賴的時候,出現報錯信息,通過配置 GOROOT 為 /usr/loca/go 即可解決。但有一個配置很重要,就是將 goproxy 設置為國內的代理(這裡使用的是七牛雲的代理),這樣你就能體驗飛一般的暢快。

export GOPROXY=https://goproxy.cn,direct

原有代碼升級

之前 gshark 沒有使用任何的依賴管理,完全是通過 GOPATH 存放依賴。這有一個問題,就是項目的依賴做出了不兼容的版本升級,最終導致項目構建失敗。通過 Go modules 可以鎖定依賴版本,從而避免這個問題。以 gshark(https://github.com/neal1991/gshark) 為例進行 Go modules 的升級。

1.mod 初始化

cd 到項目文件夾中

go mod init github.com/neal1991/gshark

2.查找依賴

go get ./...

只需要兩部就可以升級使用 Go modules 就可以了。

GShark

GShark 是我之前開源的一款 Github 敏感信息監測的系統,之前也有寫過文章介紹這個項目。這個工具應該目前有一些同學在使用,可能使用過程中最大的問題就是項目的構建。因為可能有的同學之前不是特別熟悉 Golang 語言,覺得部署起來很麻煩。但其實 Golang 項目的構建特別方便,之前不方便主要還是由於項目的依賴比較難下。可是如果 Golang 升級到 1.13 之後,項目構建僅僅需要幾步。

1.下載代碼

git clone https://github.com/neal1991/gshark

2.下載依賴

go get ./...

3.編譯

go build main.go

4.運行

運行之前需要把 conf 文件夾裏面的 app-template.ini 重命名為 app.ini,使用自己的配置即可。

// 啟動 web 服務./main web  // 啟動爬蟲./main scan

通過上面幾步就可以啟動 GShark 服務了。

總結

雖然說 gorpoxy 以及 modules 都不是 1.13 版本才有的。但是目前這些特性在 1.13 版本已經穩定運行。總的來說,升級到 Go 1.13,真香。