簡體   English   中英

找不到提供套件的模組

[英]Cannot find module providing package

我不確定如何使用“ go mod”解決依賴項問題。 據我所知,它正在獲取某個子依賴關系的錯誤版本,該依賴關系指向不再存在的存儲庫。

我剛去很新,所以我確定我正在搞砸,我很樂意為您提供一些幫助,以幫助您了解如何解決此問題。 請檢查以下示例:

用go get獲得我唯一的依賴關系很好

export GOPATH=`mktemp -d`
export MYAPP=`mktemp -d`
cd $MYAPP

cat << EOF > main.go
package main
import (
  "fmt"
  "os"
  "github.com/kubernetes/minikube/pkg/storage"
)
func main() {
  if err := storage.StartStorageProvisioner(); err != nil {
    fmt.Printf("Error starting provisioner: %v\n", err)
    os.Exit(1)
  }
}
EOF

go get github.com/kubernetes/minikube/pkg/storage
go build && echo "WORKED" || echo "FAILED"

但是,通過go mod獲取它不起作用

export GOPATH=`mktemp -d`
export MYAPP=`mktemp -d`
cd $MYAPP

cat << EOF > main.go
package main
import (
  "fmt"
  "os"
  "github.com/kubernetes/minikube/pkg/storage"
)
func main() {
  if err := storage.StartStorageProvisioner(); err != nil {
    fmt.Printf("Error starting provisioner: %v\n", err)
    os.Exit(1)
  }
}
EOF

go mod init github/my/repo
go build && echo "WORKED" || echo "FAILED"

我如何使最后一個工作?

$ go version
go version go1.12 darwin/amd64

根據Go模塊Wiki

日常的依賴關系升級和降級應該使用“ go get”完成,它將自動更新go.mod文件。 或者,您可以直接編輯go.mod。

就我所知,go mod init不會獲得您的依賴關系,而是會初始化一個新模塊並創建一個mod文件來跟蹤您模塊所使用的依賴關系版本。

因此,去獲取您的依賴關系很好。

另一方面,根據Wiki,Go模塊再次提供某些功能:

諸如go buildgo test之類的標准命令將根據需要自動添加新的依賴關系,以滿足導入要求(更新go.mod並下載新的依賴關系)。

需要時,可以使用諸如go get foo@v1.2.3,go foo @ master,go foo @ e3702bed2之類的命令選擇更具體的依賴版本,或者直接編輯go.mod。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM