文章目錄
樣例目錄結構
建立本地module的方式
調用本地module的方式
注意事項
go mod 的模式, 可以管理包/模塊的依賴關系, 從go1.16開始,會自動開啟.
這個跟GOPATH的模式區別很大, 在引用本地包/模塊(module)的時候,我們可以采用本文描述的辦法.
樣例目錄結構
go
└─src
├── audio-websocket
│ ├── go.mod
│ ├── go.sum
│ ├── README.md
│ └── main.go
└── utils@v0.0.0
├── go.mod
├── utils.go
└── utils_test.go
建立本地module的方式
創建本地模塊並初始化
mkdir utils@v0.0.0
cd utils@v0.0.0
# init的模塊名中必須包含小數點, 可用github.com或自己的域名
go mod init huzhenwei.top/utils
# 這個命令會在當前目錄創建一個名為go.mod的文件, 在本文中不會修改它的內容
本地模塊golang源碼如下:
package utils
import (
"crypto/rand"
"encoding/hex"
"strconv"
"time"
)
// UnixTimeUniqueID 返回一個"unix時間和n*2長度的唯一碼"字符串
func UnixTimeUniqueID(n uint16) string {
b := make([]byte, n) //8 character
if _, err := rand.Read(b); err != nil {
panic(err)
}
t := time.Now().Unix()
return strconv.FormatInt(t, 10) + "-" + hex.EncodeToString(b)
}
調用本地module的方式
例如audio-websocket要調用上述本地module, 需在audio-websocket/go.mod增加如下內容:
# 在go.mod中增加這兩條內容就能調用huzhenwei.top/utils這個本地module了
require huzhenwei.top/utils v0.0.0
replace huzhenwei.top/utils v0.0.0 => ../utils@v0.0.0
golang源碼中的引用方式如下:
package main
import (
"path"
"huzhenwei.top/utils"
)
filePath := path.Join("/data/voices/", utils.UnixTimeUniqueID(4))
注意事項
切換到go mod模式后, 原先基於GOPATH方式的模塊引用可能會不正常, 可用如下命令關閉
# 關閉go mod
go env -w GO111MODULE=off
# 開啟go mod
#go env -w GO111MODULE=on
引用模塊時如果提示verifying module: invalid GOSUMDB: malformed verifier id, 可嘗試用如下方法關閉校驗:
# 關閉GOSUMDB
go env -w GOSUMDB=""
# 沒有問題時建議開啟GOSUMDB
go env -w GOSUMDB="sum.golang.org"