3 回答

TA贡献1802条经验 获得超4个赞
即使未设置字段,Proto3 也会返回零值。目前无法区分某个字段是否已设置。
可能的解决方案:
使用proto2而不是proto3。
使用 gogoproto 的可为空扩展。
使用
google.protobuf.FieldMask
扩展,请参阅 Google API 设计指南中的常见设计模式:部分响应和输出字段。

TA贡献1911条经验 获得超7个赞
就我而言,我用几个包解决了这个问题:
我的原型文件如下所示:
syntax = "proto3";
import "google/protobuf/wrappers.proto";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
message Message {
google.protobuf.StringValue path = 1 [(gogoproto.wktpointer) = true];
}
我使用的生成 go 代码的命令如下所示:
protoc -I. -I%GOPATH%/src --gogofaster_out=plugins=grpc:. proto/*.proto
生成的go文件如下所示:
type Message struct {
Path *string `protobuf:"bytes,1,opt,name=path,json=path,proto3,wktptr" json:"path,omitempty"`
}
- 3 回答
- 0 关注
- 298 浏览
添加回答
举报