Go mod 使用遇到的問題

wacho發表於2020-02-12

1、 cannot load log/mylog: malformed module path "log/mylog": missing dot in first path element

  1. go1.13 mod 要求import 後面的path 第一個元素,符合域名規範,比如code.be.mingbai.com/tools/soa

  2. 即使是本專案下的其他包

  3. 如果無法使用域名,可以考慮使用replace,但不建議這樣做。

  4. eg: replace code.be.mingbai.com/tools/soa => ../../tools/soa

總結起來就是把你的專案放在一個域名目錄下,不再是之前那種隨意的名字了,這樣就解決了這個報錯問題。

2、cannot find module for path xxxx

從輸出可以看出,在程式 中呼叫 其他的依賴包,在編譯過程就失敗了。無法找到 對應的依賴包,

按照傳統的$GOPATH引入包原則,只要在$GOPATH/src存在相應路徑的包,就可以完成編譯了。從現在的情形就可以解釋$GOPATHGo Module功能開啟後,對原有引入包的規則發生的改變。
舉個例子,比如現在 xx.com/foo 和 xx.com/hello 二個資料夾,在自己專案中,hello 下的 main.go 中引用 foo 下面的 foo.go 檔案,package 是 foo。foo/foo.go 如下:

package foo

import "fmt"

func Tc()  {
    fmt.Println("foo test")
}

hello/main.go 如下:

package main

import "foo/foo"

func main() {
    foo.Tc()
}

此時去執行 hello 下 main.go,go run main.go,就會提示上述錯誤,找不到 foo,此時 hello 下的go.mod只有一句話,無法找到對應的包,沒有 require,需要我們手動新增,xx.om/foo => ../foorequire xx.com/foo v0.0.0,然後再去執行 go run 就可以輸出結果了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章