热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang.org/x/net/trace重复错误

使用grpc进行开发时,启动grpcclient报错如下

使用grpc进行开发时,启动grpc client报错如下:

panic: /debug/requests is already registered. You may have two independent copies of golang.org/x/net/trace in your binary, trying to maintain separate state. This may involve a vendored copy of golang.org/x/net/trace.

错误原因

golang.org/x/net/trace 在整个$GOPATH中有重复的副本,包括其他项目的vendor目录中依赖了golang.org/x/net包。

错误提示

goroutine 1 [running]:
golang.org/x/net/trace.init.0()
/Users/lcl/go/src/golang.org/x/net/trace/trace.go:123 0x17e

查看golang.org/x/net/trace/trace.go文件中的init()方法

// HTTP ServeMux paths.
const (
debugRequestsPath = "/debug/requests"
debugEventsPath = "/debug/events"
)
...
func init() {
_, pat := http.DefaultServeMux.Handler(&http.Request{URL: &url.URL{Path: debugRequestsPath}})
if pat == debugRequestsPath {
panic("/debug/requests is already registered. You may have two independent copies of "
"golang.org/x/net/trace in your binary, trying to maintain separate state. This may "
"involve a vendored copy of golang.org/x/net/trace.")
}
// TODO(jbd): Serve Traces from /debug/traces in the future?
// There is no requirement for a request to be present to have traces.
http.HandleFunc(debugRequestsPath, Traces)
http.HandleFunc(debugEventsPath, Events)
}

解决办法


  1. 使用包管理工具govendor,用于将go build时的应用路径搜索调整成为当前项目目录/vendor目录方式 推荐
  2. $GOPATH目录下只保留一份golang.org/x/net/trace,删除所有项目vendor目录中的golang.org/x/net/trace 不推荐
  3. 独立工程目录,每个项目设置GOPATH 不推荐

推荐阅读
author-avatar
mobiledu2502881447
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有