proto3中的optional关键字

673 阅读1分钟

官方文档

protobuf.dev/programming…

image.png

用了optional,在字段没填写的时候,不会被序列化进去,可以节省空间

proto2的required是指client不填这个字段就请求的话会报错

相比那个,proto3确实都是optional的,因为proto3不填也不会报错

现在的optional在序列化出来以后是指针

现在的proto3中,标记为option的,生成的代码就是指针

message AcquireResponse {
  // limited rule index, -1 means all access
  optional int64 baned = 1;
}


type AcquireResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// limited rule index, -1 means all access
	Baned *int64 `protobuf:"varint,1,opt,name=baned,proto3,oneof" json:"baned,omitempty"`
}