恐慌:http:/debug/requests有多个注册

10

我在我的Go项目中嵌入了两个子项目。编译成功后,运行项目时报错"panic: http: multiple registrations for /debug/requests"。下方为详细错误信息。

goroutine 1 [running]:
net/http.(*ServeMux).Handle(0x19ae000, 0x126bb20, 0xf, 0x1964540, 0x1297d90)
/usr/local/go/src/net/http/server.go:2270 +0x627
net/http.(*ServeMux).HandleFunc(0x19ae000, 0x126bb20, 0xf, 0x1297d90)
/usr/local/go/src/net/http/server.go:2302 +0x55
net/http.HandleFunc(0x126bb20, 0xf, 0x1297d90)
/usr/local/go/src/net/http/server.go:2314 +0x4b
github.own.com/chalex/testfabric/vendor/github.com/hyperledger/fabric-sdk-go/vendor/golang.org/x/net/trace.init.0()
/home/chalex/ibm/src/github.own.com/chalex/testfabric/vendor/github.com/hyperledger/fabric-sdk-go/vendor/golang.org/x/net/trace/trace.go:115 +0x42
github.own.com/chalex/testfabric/vendor/github.com/hyperledger/fabric-sdk-go/vendor/golang.org/x/net/trace.init()
<autogenerated>:1 +0x1cd
github.own.com/chalex/testfabric/vendor/github.com/hyperledger/fabric-sdk-go/vendor/google.golang.org/grpc.init()
<autogenerated>:1 +0x82
github.own.com/chalex/testfabric/vendor/github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/protos/peer.init()
<autogenerated>:1 +0x6f
github.own.com/chalex/testfabric/vendor/github.com/hyperledger/fabric-sdk-go/api/apitxn.init()
<autogenerated>:1 +0x44
github.own.com/chalex/testfabric/chaincode/client.init()
<autogenerated>:1 +0x49
main.init()

有人知道如何修复吗?我猜是因为我导入的两个项目都在监听/debug/requests吗?


3
你的猜测是正确的。必须更改代码。 - Volker
1
这就是为什么在init函数中执行此类操作对于库来说是危险的原因。它们应该只在你明确告诉它们时注册处理程序。 - Adrian
谢谢 @Volker @Adrian。我找到了原因。这是由于 golang.org/x/net/trace 项目引起的。在它的 init() 函数中,他们使用硬编码来处理 debug/request。因此,如果两个项目都导入了该库,则会发生冲突。 - Chalex
2个回答

9
我找到了原因。这是由于 golang.org/x/net/trace 项目引起的。在它的 init() 函数中,他们使用硬编码处理 debug/request 。所以如果两个项目都导入该库,则会发生冲突。

问题的原因如@chalex所解释的那样。对我来说,临时的解决方法是在$GOPATH/pkg/mod/<mypackage>/Godeps/_/x/net/trace/trace.go中注释掉init()方法。 - anisbhsl

5

有多个项目使用了golang.org/x/net/trace,其中一些项目将golang.org/x/net/trace保存在其vendor目录中,这导致了冲突。通过删除其他内容并仅留下一个来解决冲突,然后问题就会得到解决。


有人知道如何找出是哪个软件包导致了“双重”供应吗? - Rogier Lommers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接