我希望我的程序使用特定版本的client-go,以便它与目标群集兼容。
但是以下语法:
import (
"log"
"os"
"path/filepath"
clientcmd "k8s.io/client-go@kubernetes-1.12.10/tools/clientcmd"
)
我用来实现构建客户端配置的方法如下:
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
出现以下错误消息:
▶继续运行main.go
包主 导入k8s.io/client-go@kubernetes-1.12.10/tools/clientcmd:只能将path @ version语法与'go get'一起使用
我应如何说明特定版本的输入?
答案 0 :(得分:4)
将导入更改为
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
(但最好将其保留在执行工具中)。仅在使用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工具仍将解析该版本标记77c08c6b86df0af19f718d9a57620c4e9b811d48
commit,并在go.mod
文件中使用它。
在此处详细了解:Go Wiki: Modules: How to Upgrade and Downgrade Dependencies