在proto中使用struct数组



由于类型不匹配,我无法调用gRPC函数

my proto file:

message Analytics {
fields ...
}

message AnalyticsSet {
repeated Analytics analytics = 1;
}
service StatService {
rpc MyMethod(AnalyticsSet) returns (<something>) {}
}

现在,我需要调用"MyMethod">

我的当前代码:

type Analytics struct {
same fields as in proto : Analytics
}
analytics := make([]Analytics, 4)
// .. some modifications in analytics ...
_, err := c.MyMethod(context.Background(), analytics)
if err != nil {
log.Fatalf("error: %s", err)
}

原文件"AnalyticsSet"是"Analytics"在Go代码中"分析";是类型为"Analytics"的数组。但这还不足以调用"MyMethod",我面临着类型不匹配…

如何修改go代码?

您必须使用从proto文件生成的Analytics结构体——您不能使用自己的类型。

您可以使用protoc.proto文件生成所需的Go代码。下面是一个设置了gRPC生成选项的例子:.

$ protoc --go_out=. --go-grpc_out=. --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative analytics.proto

您的原型文件应该设置go_package选项来描述生成的原型代码所属的Go导入路径。您还需要安装protoc所需的go/go-grpc生成器实用程序:

$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

详细信息请参见:

  • https://developers.google.com/protocol-buffers/docs/gotutorial
  • https://developers.google.com/protocol-buffers/docs/reference/go-generated
  • https://grpc.io/docs/languages/go/quickstart/

最新更新