【问题标题】:Import .proto files from another project从另一个项目导入 .proto 文件
【发布时间】:2021-11-16 17:35:52
【问题描述】:

我想将不同项目中定义的 .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.

【问题讨论】:

  • 这能回答你的问题吗? Using a shared external package for proto files?
  • @blackgreen 我没有得到第一个答案。第二个答案是提供在另一个项目中使用原型文件的解决方案。但是,如果我要从中导入 proto 的项目不是我维护的,我该怎么办?
  • 建议在项目中的某处克隆远程 repo,可能作为 git 子模块
  • 我应该定期更新吧?这不是缺点吗。还有其他更清洁的方法吗?

标签: go protocol-buffers grpc rpc proto


【解决方案1】:

为了编译你的 proto,你应该克隆依赖 repos 并在 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 中的原型是如何构建的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多