登录
首页 >  Golang >  Go问答

导入另一个项目中的 .proto 文件

来源:stackoverflow

时间:2024-03-19 15:06:29 354浏览 收藏

在 Go 项目中导入其他项目定义的 .proto 文件时,需要将依赖项存储库克隆并将其设置为 protoc 导入中的包含路径。这允许访问其他项目的 .proto 定义,以便在当前项目中使用它们。通过正确设置包含路径,可以编译 .proto 文件并生成包含导入消息类型的 Go 代码。

问题内容

我想将不同项目中定义的 .proto 文件导入到我的 golang 项目中,并使用其中定义的消息类型。

我要导入的原型文件是:https://github.com/lyft/clutch/blob/main/api/k8s/v1/k8s.proto

我已将导入语句添加为:

import "github.com/lyft/clutch/api/k8s/v1/k8s.proto";

为了在该文件中使用消息类型“job”,我添加了

message jobs {
repeated clutch.k8s.v1.job job = 1;
}

当我尝试编译 proto 文件时,出现错误

Import "github.com/lyft/clutch/blob/main/api/k8s/v1/k8s.proto" was not found or had errors.

"clutch.k8s.v1.Job" is not defined.

正确答案


为了编译您的原型,您应该克隆依赖项存储库并将其设置为 protoc 导入中的包含路径,例如:

job.proto

syntax = "proto3";

package clutch.k8s.v1;

// degine
option go_package = "github.com/job";

import "api/k8s/v1/k8s.proto";


message jobs {
  repeated clutch.k8s.v1.job job = 1;
}

编译.sh

proto_out_dir=.
gobin=~/go/bin

protoc \
      --go_out "${proto_out_dir}" \
      --go_opt paths=source_relative \
      --go-grpc_out "${proto_out_dir}" \
      --go-grpc_opt require_unimplemented_servers=false,paths=source_relative \
      --plugin protoc-gen-go="${gobin}/protoc-gen-go" \
      --plugin protoc-gen-go-grpc="${gobin}/protoc-gen-go-grpc" \
--go-grpc_opt=paths=source_relative \
--proto_path=../protoc-gen-validate \
--proto_path=../api-common-protos \
--proto_path=../clutch \
--proto_path=../clutch/api \
--proto_path=. \
job.proto

将产生:

job.pb.go

...
type Jobs struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields

    Job []*v1.Job `protobuf:"bytes,1,rep,name=job,proto3" json:"job,omitempty"`
}
...

另请参阅如何在源存储库中构建原型 here

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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