Go glog标志重定义错误

Go glog标志重定义错误,go,kubernetes,glog,Go,Kubernetes,Glog,我在我的项目中使用glog标志log_dir。最近我导入了kubernetes库,并开始出现这种运行时恐慌 死机:./aaa.test标志重新定义:log\u dir May 16 23:51:35 ecmdev03-core01 docker[26867]: goroutine 1 [running]: May 16 23:51:35 ecmdev03-core01 docker[26867]: panic(0x15ebc60, 0xc8201aae90) May 16 23:51:35 ec

我在我的项目中使用glog标志log_dir。最近我导入了kubernetes库,并开始出现这种运行时恐慌

死机:./aaa.test标志重新定义:log\u dir

May 16 23:51:35 ecmdev03-core01 docker[26867]: goroutine 1 [running]:
May 16 23:51:35 ecmdev03-core01 docker[26867]: panic(0x15ebc60, 0xc8201aae90)
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /usr/local/go/src/runtime/panic.go:464 +0x3e6
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).Var(0xc8200160c0, 0x7f561118c1c0, 0xc8201aae40, 0x1bddd70, 0x7, 0x1d75860, 0x2f)
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /usr/local/go/src/flag/flag.go:776 +0x454
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).StringVar(0xc8200160c0, 0xc8201aae40, 0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f)
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /usr/local/go/src/flag/flag.go:679 +0xc7
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).String(0xc8200160c0, 0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f, 0xc8201aae30)
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /usr/local/go/src/flag/flag.go:692 +0x83
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.String(0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f, 0xba3950)
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /usr/local/go/src/flag/flag.go:699 +0x5f
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/vendor/github.com/golang/glog.init()
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /src/ecm_infra/go/src/k8s.io/kubernetes/vendor/github.com/golang/glog/glog_file.go:41 +0x13e
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/labels.init()
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/labels/selector.go:810 +0x6b
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/api/unversioned.init()
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go:30 +0x6f
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/api.init()
May 16 23:51:35 ecmdev03-core01 docker[26867]:         /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/api/types.go:2731 +0x64

看起来k8s提供的glog库与我正在使用的库相冲突。引入供应商目录是解决这个问题的方法吗?我应该使用glide、Govendo、gb等供应商库吗?如果是,首选哪一种

该错误与冲突库无关,它是一个冲突标志(
log\u dir
)。这意味着您要添加一个“-log_dir”标志,kubernetes使用的glog库也有一个
log_dir
标志。这是在包初始化期间在库中添加标志时出现的问题。不幸的是,贩卖不会改变任何事情。在导入日志库或kubernetes时,可以通过操纵
flag.CommandLine
全局变量指向不同的
flag.FlagSet
来解决此问题,但这将很棘手,因为这取决于导入顺序。

在使用glide销售依赖项时,我遇到了类似的问题

根据kubernetes没有glide.lock/glide.yml,依赖关系平坦化不会发生,最终glog会被定义两次,因为还包括vendor/k8s.io/kubernetes/vendor

上述链接的解决方法对我很有效:


glide安装--剥离供应商--剥离vcs

我使用k8s库,并且面临重新定义的
标志:log_dir
问题。 我发现有几个kubernetes包不在我的供应商中。然后我
Govendo添加了它们,然后它被修复了

我猜当在我的供应商文件夹中找不到这些包时,就生成了两个glog副本(一个在我的供应商文件夹中,一个在我的$GOPATH中的k8s.io/kubernetes/vendor中)


如何找到丢失的包裹?我用了一种愚蠢的方法,将$GOPATH/src/k8s.io重命名为其他名称并构建我的项目,看看找不到什么。然后添加它~

我看到的
标志重定义:log\u dir
错误,堆栈跟踪指向
glog/glog\u文件。go:41+0xd3

问题的根本原因是
GOPATH

我在不同的地方有两份相同的回购协议。当试图在其中一个副本中运行测试时,go包是从另一个repo中挑选出来的。所以我在
glog
中有两个关于一切的定义

我将另一个回购协议重命名为新名称,然后它开始工作


因此,请检查您的
GOPATH
,确保您没有从其他地方导入库。

请注意,Kubernetes刚刚移动到glog分支(k8s.io/klog),部分是为了解决这些问题。