使用 protobuf 定义一个结构
message One {
required uint32 type = 1;
required uint32 value = 2;
required uint32 size = 3;
}
使用 protobuf 官方的 go 插件得到的代码
type One struct {
Type *uint32 `protobuf:"varint,1,req,name=type" json:"type,omitempty"`
Value *uint32 `protobuf:"varint,2,req,name=value" json:"value,omitempty"`
Size *uint32 `protobuf:"varint,3,req,name=size" json:"size,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
这里的 Size 字段是正常的,没有被修改,如果使用 gogoproto 插件生成的代码,就是这样的
type One1 struct {
Type *uint32 `protobuf:"varint,1,req,name=type" json:"type,omitempty"`
Value *uint32 `protobuf:"varint,2,req,name=value" json:"value,omitempty"`
Size_ *uint32 `protobuf:"varint,3,req,name=size" json:"size,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
Size 字段被编译成 Size_了 有没有办法解决这个问题呢
如果是新项目还好,这个是老的项目,有很多关联代码,修改起来好痛苦😭
1
joesonw 2022-08-10 11:28:52 +08:00 via iPhone
gogo 里面有保留关键字。Size 是生成里面有这个方法。禁用 sizer ,使用 protosizer
|
2
joesonw 2022-08-10 11:29:32 +08:00 via iPhone
|
3
bruce0 OP @joesonw 确实, 通过 `option (gogoproto.protosizer_all) = true;` 能 生成 protosizer, 但是 gogofast 这个插件不支持 protosizer, gogo 这个插件可以, 但是 Benchmark 测试下来, gogo 的性能比 gogofast 差好多,难受
|