我们写了一些Go代码与我们的Kubernetes集群交谈并获取暴露的服务的IP。我们这样做:
(import "gopkg.in/kubernetes/kubernetes.v1/pkg/client/restclient")
(import kubectl "gopkg.in/kubernetes/kubernetes.v1/pkg/client/unversioned")
svc, err := c.Services(k8sNS).Get(svcName)
if err != nil {
panic(l.Errorf("Could not retrieve svc details. %s", err.Error()))
}
svcIP := svc.Status.LoadBalancer.Ingress[0].IP
go get
工作正常,我们的脚本会在我们执行go run ...
并且每个人都很高兴时执行。现在,截至昨天(从发布此问题开始)到同一个脚本 - go get
失败。错误是这样的:
[09.07.2016 10:56 AM]$ go get
package k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install: cannot find package "k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install" in any of:
/usr/local/go/src/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install (from $GOROOT)
/home/ckotha/godir/src/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install (from $GOPATH)
我们的代码中没有专门使用authentication
包。我们正确导入kubernetes库吗?还有另外一种方法吗?
ls
上的 $GOPATH/k8s.io/kubernetes/pkg/apis/
,发现了这个:
:~/godir/src/k8s.io/kubernetes/pkg/apis
[09.07.2016 10:53 AM]$ ls
abac apps authentication authorization autoscaling batch certificates componentconfig extensions imagepolicy OWNERS policy rbac storage
答案 0 :(得分:1)
看起来您导入的包已更改。
您可以更新现有存储库:
go get -u
-u标志指示get使用网络更新named 包及其依赖项。默认情况下,get使用网络 检查丢失的包但不使用它来查找更新 现有的包裹。
您确实使用gopkg.io将版本固定到v1,但我认为您希望更具体,例如,v1.3.6(编辑:这不起作用,因为gopkg.in不允许包选择器比主要版本更具体。)。
或者,确保代码保持不变的一种好方法是编译二进制文件并执行它,而不是使用go run
。