Go 从protobuf中的其他包导入类型定义
我正在尝试使用一个非常基本的操作创建一个grpc服务,该操作是Go 从protobuf中的其他包导入类型定义,go,protocol-buffers,grpc,Go,Protocol Buffers,Grpc,我正在尝试使用一个非常基本的操作创建一个grpc服务,该操作是GetDeployment,将名称空间和名称作为输入,并返回Kubernetes部署。问题是,我不想为部署定义我自己的消息,因为它已经存在于服务器上 我是grpc的新手,可能不太了解它是如何工作的,但我可以将此消息导入到我自己的文件中,然后编写以下.proto文件吗 syntax = "proto3"; package api; import "google/api/annotations.proto"; import "k8s.i
GetDeployment
,将名称空间和名称作为输入,并返回Kubernetes部署。问题是,我不想为部署定义我自己的消息
,因为它已经存在于服务器上
我是grpc的新手,可能不太了解它是如何工作的,但我可以将此消息导入到我自己的文件中,然后编写以下.proto
文件吗
syntax = "proto3";
package api;
import "google/api/annotations.proto";
import "k8s.io/kubernetes/pkg/api/v1/generated.proto";
message GetDeploymentOptions {
string namespace = 1;
string name = 2;
}
service AppsV1 {
rpc GetDeployment(GetDeploymentOptions) returns (k8s.io.kubernetes.pkg.api.v1.Deployment) {}
}
提前感谢GRPC codegen只是一个protoc插件。它为
服务
和rpc
生成代码,但它遵循导入的规则
在您的示例中,如果您的文件位于src/api.proto中,而k8s api repo是签出到thirdparty/k8s.io/api
文件夹中的git子模块,则您将通过运行以下命令生成所需的文件:
root>protoc.exe -I thirdparty k8s.io/api/core/v1/generated.proto --go_out=go
root>protoc.exe -I thirdparty src/api.proto --go_out=plugins=grpc:go
第一个命令生成包含k8s消息的.pb.go文件,而第二个命令生成包含消息和服务的.pb.go文件
查看该文件的瞬时导入,您可能还需要将api机器签出到k8s.io/apimachinery中,并在该文件上运行protoc。非常感谢,您让我度过了美好的一天。你的解释很清楚。最后,我检查了api机器,一切都很顺利。