从另一个项目导入.proto文件



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

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

我添加了import语句:

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;
}

compile.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"`
}
...

查看如何在源代码库中构建原型

最新更新