如果想在你的模塊如果想引入你本地其他地方的模塊,可以嘗試通過 replace 指定目錄,而且前提是你的 article 也得 go 的一個模塊,而不是按 gopath 下的某個包來引入。
我簡答舉個例子吧,比如現在有兩個項目,分別是 blog 和 article,結果如下:
├─article
│ article.go
│ go.mod
│
├─blog
│ go.mod
│ main.go
blog 是應用的入口,main 所在位置,而 article 可以理解爲你寫的一個公共的庫,其中提供了一個函數 Hello()。現在,要在 blog 中調用 article 中的 Hello() 函數。
article 模塊中的 go.mod 內容如下:
module article
go 1.13
article.go 內容如下:
package article
func Hello() string { return "Hello" }
blog 模塊中的 go.mod 內容如下:
go 1.13
require github.com/article v0.0.0-incompatible
replace github.com/article => ../article
此處的 replace 稍微介紹下,之所以要是 github.com/article 的格式,是因爲在 go1.13 中, go module 名稱規範要求路徑的第一部分必須滿足域名規範,否則可能彙報類似 malformed module path "article": missing dot in first path element
這樣的錯誤。當然,在 go1.12 不會有報這個錯誤。建議的話,如果是公司內部使用,可以替換成公司內部域名。
replace 的第二個參數指定了不從遠程獲取,而是本地某個路徑下的模塊替換 github.com/article。
main.go 的內容如下:
package main
import (
"fmt"
"github.com/article"
)
func main() { fmt.Println("Hello") fmt.Println(article.Hello()) }
此時,在 blog 執行 go run main.go 是可以成功運行的。