在原型中使用结构数组
Use Array of struct in proto
由于类型不匹配,我无法调用 gRPC 函数
我的原型文件:
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)
}
在 Proto 文件中“AnalyticsSet”是“Analytics”的数组
在 Go 代码中,“analytics”是一个“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
可以在以下位置找到更多详细信息:
由于类型不匹配,我无法调用 gRPC 函数
我的原型文件:
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)
}
在 Proto 文件中“AnalyticsSet”是“Analytics”的数组 在 Go 代码中,“analytics”是一个“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 install google.golang.org/protobuf/cmd/protoc-gen-go@latest
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
可以在以下位置找到更多详细信息: