Golang解决opentelemetry-proto无对应Go包的路径替换及编译报错问题
问题根因
github.com/open-telemetry/opentelemetry-proto 官方仓库仅维护protobuf定义文件,不会预提交生成后的Go代码,所以直接通过go mod拉取的官方依赖包中不存在gen/go/相关路径,因此编译时会提示包找不到。
解决方案
方案1:本地生成代码+go mod重定向(推荐,适配Go mod模式)
- 本地克隆opentelemetry-proto仓库后,在仓库根目录执行
make gen-go生成Go代码,生成后的代码会默认存放在仓库根目录的gen/go路径下 - 在你的业务项目
go.mod文件末尾添加重定向规则,将官方模块路径指向你本地生成完代码的仓库目录:
replace github.com/open-telemetry/opentelemetry-proto => /本地opentelemetry-proto仓库的绝对路径
- import直接使用官方路径即可:
import "github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1"
执行go build时会直接读取本地目录下的生成代码,不会拉取官方仓库的内容。
方案2:使用已存放到GOPATH的生成代码
你已经将生成的代码复制到$GOPATH/src/opentelemetry-proto/gen/go路径,可根据你使用的依赖模式调整:
- 若使用GOPATH模式(
GO111MODULE=off),import直接写相对于GOPATH/src的路径即可:
import "opentelemetry-proto/gen/go/common/v1"
- 若使用Go mod模式,仍需在
go.mod中添加重定向规则:
replace opentelemetry-proto => /你的GOPATH完整路径/src/opentelemetry-proto
import规则和上面GOPATH模式保持一致即可。
注意:如果生成的代码头部package声明和导入路径不匹配,需检查你的
protoc-gen-go版本是否和opentelemetry-proto仓库要求的版本一致,版本不兼容会导致生成的代码路径、包声明异常。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

