使用模块进行版本化导入失败

我希望我的程序使用特定版本的client-go,以便它与目标集群兼容。


但是以下语法:


import (

    "log"

    "os"

    "path/filepath"


    clientcmd "k8s.io/client-go@kubernetes-1.12.10/tools/clientcmd"

)

我用它来构建我的客户端配置,如下所示:


    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)


失败并显示此错误消息:


▶ go run main.go

package main imports k8s.io/client-go@kubernetes-1.12.10/tools/clientcmd: 只能使用 path@version 语法和 'go get'


我应该如何陈述特定的版本化输入?


慕勒3428872
浏览 96回答 1
1回答

开满天机

将您的导入更改为import "k8s.io/client-go/tools/clientcmd"并执行命令:go get k8s.io/client-go@kubernetes-1.12.10使用的版本记录在go.mod文件中。以上go get内容将go.mod根据给定的版本进行更改。请注意,您也可以go.mod手动编辑(但最好将其留给 go 工具)。如果您使用的版本为开头或更高版本,则只需修改导入路径v2,在这种情况下,主要版本必须是后缀,例如import "k8s.io/client-go/tools/clientcmd/v2"笔记:在上述go get命令之后,go.mod文件将被修改为包含require如下指令:k8s.io/client-go v0.0.0-20190708094436-77c08c6b86df // indirect这样做的原因是因为 go 模块需要语义版本控制,而 kubernetes-1.12.10不是 semver2 兼容的版本号。尽管如此,go 工具仍会确定此版本标记了77c08c6b86df0af19f718d9a57620c4e9b811d48commitgo.mod ,并在文件中使用它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go