將 dep 更換為 go mod

astaxie發表於2020-02-16

起因

之前一直在使用 dep 來管理專案, 最近碰到了兩個噁心的事情, 就是安裝 ali-oss-sdk 和 go-ethereum 客戶端的時候超級慢,lantern 也是半廢狀態, 時斷時連,go-ethereum 等了半個小時都沒裝上(開燈和關燈都試了), 最後 dep ensure 狀態回家, 第二天上班才好。

正好在我的帖子中 @appleboy 給我留言說 [可以改用 go module 了] , 然後就試了下, 淚奔, 只能說太好用了。

結果就是我就將所有的專案全部用 module 替換了。

替換

這裡記錄下過程, 用我的部落格來做示例。

這個 go mod 是 go 自帶的, 替換起來非常簡單, 正好我的 go 環境使用的是最 go1.12 , 配置起來很容易。

將原本的 dep 的配置刪除

# 我已經將程式碼從 GOPATH 中改到 /www 目錄了 現在可以脫離 GOPATH ,
# 程式碼也可以放在任意目錄了
# 如果程式碼還在 GOPATH  就需要手動新增下面配置 不叫 Go 去自動識別
# export GO111MODULE=on
cd /www/mdblog

# 刪除原本的 dep 的配置 這個我也不糾結了 原本 dep 對版本的控制就不太好
# 如果對使用的包版本有要求 稍後可以手動修改 go.mod 將版本改為指定的
rm -rf Gopkg.* vendor

配置 go mod

這個也非常簡單,它初始化後會在 $GOPATH/pkg/mod 目錄中將所有下載過的依賴包儲存, 並且可以儲存多個版本, 下次再使用已經下載過的版本依賴時, 不會再去網上下載, 應該算是個本地倉庫的感覺吧。

# 初始化
go mod init

# 如果是一個新的專案 初始化的時候需要指定專案名稱 如下面兩個例子
# go mod init demoname
# go mod init github.com/astaxie/mdblog

現在就會在專案目錄下生成一個 go.mod 檔案, 並且當在當前專案目錄下執行 go get , go build, go run 等命令的時候, 自動將依賴的包下載,同時將版本資訊寫入到 go.mod 中,還會生成一個新的 go.sum 詳細的記錄

就這麼簡單的將專案從 dep 轉成 module 管理。

代理

換成 module 方式之後可以很方便的來使用代理了,例如可以使用 https://goproxy.io/ 代理, 裡面有配置的說明。因為對於有一些https://golang.org/x/... 專案沒辦法下載,所以 proxy 就至關重要了,而且用了 proxy 下載速度搜搜的

Linux 下新增下面變數就可以生效

# Enable the go modules feature
export GO111MODULE=on
# Set the GOPROXY environment variable
export GOPROXY=https://goproxy.io,direct

這裡有個坑, 如果使用了私有倉庫, 這個代理是找不到的, 所以必須配置上第二個引數 direct

更多原創文章乾貨分享,請關注公眾號
  • 將 dep 更換為 go mod
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章