找不到提供套件的模组

时间:2019-02-28 14:24:35

标签: go go-modules

我不确定如何使用“ 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

1 个答案:

答案 0 :(得分:0)

根据the Go modules wiki

  

依赖项的日常升级和降级应该使用“ go get”完成,它将自动更新go.mod文件。或者,您可以直接编辑go.mod。

就我所知,go mod init不会获得您的依赖关系,而是会初始化一个新模块并创建一个mod文件来跟踪您模块所使用的依赖关系版本。

因此,获取依赖关系很好。

另一方面,根据维基,

Go模块再次提供某些功能:

  

执行构建执行测试之类的标准命令将根据需要自动添加新的依赖关系,以实现导入(更新go.mod并下载新的依赖关系)。

     

在需要时,可以选择以下更具体的依赖版本:   命令,例如go get foo@v1.2.3,go get foo @ master,go get   foo @ e3702bed2,或直接编辑go.mod。