登录
首页 >  Golang >  Go问答

在 Go 中,如何追踪哪个导入导致了变量初始化时发生的错误?

来源:stackoverflow

时间:2024-04-07 17:00:34 364浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《在 Go 中,如何追踪哪个导入导致了变量初始化时发生的错误?》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我正在尝试为存储库运行 main() 函数,但遇到了变量初始化时发生的棘手恐慌:

> go run main.go
go: finding github.com/myorg/some-repo/emulator latest
go: finding github.com/myorg/some-repo latest
panic: duplicate metrics collector registration attempted

goroutine 1 [running]:
github.com/prometheus/client_golang/prometheus.(*registry).mustregister(0xc0002a09b0, 0xc00033a1d0, 0x1, 0x1)
    /users/kurt/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:400 +0xad
github.com/prometheus/client_golang/prometheus/promauto.factory.newgaugevec(0x1acee40, 0xc0002a09b0, 0x0, 0x0, 0x0, 0x0, 0x19ade0e, 0x21, 0x19c60fa, 0x56, ...)
    /users/kurt/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/promauto/auto.go:306 +0x118
github.com/prometheus/client_golang/prometheus/promauto.newgaugevec(0x0, 0x0, 0x0, 0x0, 0x19ade0e, 0x21, 0x19c60fa, 0x56, 0x0, 0xc000370160, ...)
    /users/kurt/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/promauto/auto.go:197 +0xa9
github.com/myorg/some-library/pubsub.init.ializers()
    /users/kurt/go/pkg/mod/github.com/myorg/[email protected]/pubsub/gcp.go:30 +0xcd
exit status 2

错误归结为这行代码:

var inFlightMetric     = promauto.NewGauge(prometheus.GaugeOpts{Name: "gcp_pubsub_handlers_running_count"})

我认为问题是,同一个库也有一个 pubsub/v2/gcp.go ,它是同一行,因此程序尝试导入 github.com/myorg/some-library/pubsubgithub。 com/myorg/some-library/pubsub/v2 因 prometheus 指标收集器中的“名称冲突”而陷入恐慌。

我想要找到哪个依赖项正在导入 github.com/myorg/some-library/pubsub 并将其替换为 pubsub/v2 以避免此名称冲突。然而,我无法弄清楚如何从这个堆栈跟踪中确定这一点。关于如何实现这一目标有什么想法吗?


解决方案


我最终通过在库模块中创建一个分支 avoid-registering-duplicate-metrics-collector 并从该分支导入它来解决这个问题:

go get github.com/myorg/some-lib@avoid-registering-duplicate-metrics-collector

在该分支中,我将 _v1 后缀附加到 pubsub 包中注册的所有指标,以避免与 pusub/v2 包发生名称冲突。但这有点麻烦,需要定期将主分支合并到该分支中以保持最新。找出导入中的哪个文件实际上正在尝试导入 pubsub 包的方法仍然有用。

本篇关于《在 Go 中,如何追踪哪个导入导致了变量初始化时发生的错误?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>