【问题标题】:Versioned import in go using modules fails使用模块进行版本化导入失败
【发布时间】:2019-12-03 18:45:23
【问题描述】:

我希望我的程序使用特定版本的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'

我应该如何声明特定的版本化输入?

【问题讨论】:

    标签: go go-modules


    【解决方案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 工具会解析此版本标记77c08c6b86df0af19f718d9a57620c4e9b811d48 commit,并在go.mod 文件中使用它。

    在此处了解更多信息:Go Wiki: Modules: How to Upgrade and Downgrade Dependencies

    另见:The Go Blog: Go Modules: v2 and Beyond

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多