首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >戈朗。替换非真实go包的模块路径

戈朗。替换非真实go包的模块路径
EN

Stack Overflow用户
提问于 2021-10-10 16:35:47
回答 1查看 1.7K关注 0票数 2

有一个包https://github.com/open-telemetry/opentelemetry-proto,它只包含protobuf定义。要生成golang代码,必须键入:

代码语言:javascript
复制
make gen-go

go build与以下消息一起失败:

代码语言:javascript
复制
build opentel: cannot load github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1: module github.com/open-telemetry/opentelemetry-proto@latest found (v0.11.0), but does not contain package github.com/open-telemetry/opentelemetry-proto/gen/go/common/v

我试图在go.mod文件中用另一条路径替换,但显然我不太擅长它。我怎么才能让它起作用?

我已经把生成的文件复制到

代码语言:javascript
复制
$GOPATH/src/opentelemetry-proto/gen/go

我应该在我的主包里放什么导入声明?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-10 17:36:31

Go源的生成方式存在一些挑战。我假设回购作者的目标是实现跨语言的一致性,以及GOPATHGO MODULES的使用--用Go.所以,是的,为了他们和我们。

这是一个(!?)解决办法:

假设您在/path/to/somedir中,并且它包含相同级别的opentelemetry-proto和my-module`‘的克隆,即:

代码语言:javascript
复制
.
├── my-module
└── opentelemetry-proto

  1. make gen-go和以前一样。这应该会创建./opentelemetry-proto/gen

go mod init github.com/open-telemetry/opentelemetry-proto

  1. In ./opentelemetry-proto/gen/go/github.com/open-telemetry/opentelemetry-proto go

代码语言:javascript
复制
.
├── gen
└── go.mod

  1. and my-modulego mod init my-module,然后:

go.mod

代码语言:javascript
复制
module my-module

go 1.17

require (
    github.com/open-telemetry/opentelemetry-proto v0.11.0
)

replace (
    github.com/open-telemetry/opentelemetry-proto => ../opentelemetry-proto/gen/go/github.com/open-telemetry/opentelemetry-proto

注意到需要GOPATH路径到包(它们不使用Go模块),所以,如果我们使用GOPATH,我们可以使用GOPATH=${GOPATH}:${PROTO_GEN_GO_DIR}/github.com/open-telemetry/opentelemetry-proto

然后,例如。

main.go

代码语言:javascript
复制
package main

import (
    v1 "github.com/open-telemetry/opentelemetry-proto/gen/go/collector/metrics/v1"
)

func main() {
    // E.g.
    _ = v1.ExportMetricsServiceRequest{}
}

解释:

make gen-go不创建一个模块,但我们可以创建一个模块。

该模块隐含在gen/go下的路径中,即github.com/open-telemetry/opentelemetry-proto

然后,从我们的项目,我们可以replace提供一个本地路径到它。路径是克隆的路径,然后返回到我们新创建的go.mod

导入路径是从模块(即过于复杂的替换路径)到我们感兴趣的任何包的路径。

注意,通常使用pb导入,但我使用了v1

我要做的是:

我认为生成的代码模块应该与它的回购相匹配。如果opentelemetry-proto是我的,我会在没有gen/go的情况下将源代码生成到回购根

因此-海事组织-将一切简化为:

代码语言:javascript
复制
github.com/open-telemetry/opentelemetry-proto => ../opentelemetry-proto

和:

代码语言:javascript
复制
import (
    v1 "github.com/open-telemetry/opentelemetry-proto/collector/metrics/v1"
)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69517065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档