go mod模式下引用本地包/模塊(module)的方法


文章目錄
樣例目錄結構
建立本地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"


免責聲明!

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



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