文章目錄
- 樣例目錄結構
- 建立本地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"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/252188.html
標籤:區塊鏈
上一篇:map[key]struct 中 struct 是不可尋址的,所以無法直接賦值
下一篇:可重入鎖的學習
