Go 从protobuf中的其他包导入类型定义

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

我正在尝试使用一个非常基本的操作创建一个grpc服务,该操作是
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机器,一切都很顺利。