Go语言 找不到提供包的模块

k2arahey  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(189)

我不知道如何解决我在“go mod”中发现的依赖问题。从我所能收集到的信息来看,它获取了一些子依赖的错误版本,这些子依赖指向一个不再存在的repo。
我非常非常新,所以我肯定我搞砸了,我希望一些帮助,以了解如何解决这个问题。请检查以下示例:

用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
of1yzvn4

of1yzvn41#

根据the Go modules wiki
依赖项的日常升级和降级应该使用“go get”来完成,它将自动更新go.mod文件。或者,您可以直接编辑go.mod。
就我所知,go mod init不会获取依赖项,而是初始化一个新模块,并创建一个mod文件来跟踪模块正在使用的依赖项版本。
所以,去获取你的依赖关系是很好的。
另一方面Go模块根据wiki再次提供某些功能:
go buildgo test这样的标准命令将根据需要自动添加新的依赖项以满足导入(更新go.mod并下载新的依赖项)。
如果需要,可以使用go get foo@v1.2.3、go get foo@master、go get foo@e3702bed2等命令选择更具体的依赖项版本,或者直接编辑go.mod。

相关问题