在go中使用google protobuf,有两个可选用的包goprotobuf(go官方出品)和gogoprotobuf。
gogoprotobuf是完全兼容google protobuf,而且经过我一些测试,它生成大代码质量确实要比goprotobuf高一些。先忙一一说明其一些选项的意义。
1 gogoproto.goproto_enum_prefix
如果选项为false,则生成的代码中不加"E_"。
enum E { // option (gogoproto.goproto_enum_prefix) = false; A = 0; B = 2; } const ( // option (gogoproto.goproto_enum_prefix) = false; E_A E = 0 E_B E = 2 ) or enum E { // option (gogoproto.goproto_enum_prefix) = false; A = 0; B = 2; } const ( A E = 0 B E = 2 )
2 gogoproto.goproto_getters
message test { // option (gogoproto.goproto_getters) = false; E e = 1; } type Test struct { E *E `protobuf:"varint,1,opt,name=e,enum=test.E" json:"e,omitempty"` XXX_unrecognized []byte `json:"-"` } func (m *Test) GetE() E { if m != nil && m.E != nil { return *m.E } return A } type Test struct { E *E `protobuf:"varint,1,opt,name=e,enum=test.E" json:"e,omitempty"` XXX_unrecognized []byte `json:"-"` }
有疑问加站长微信联系(非本文作者)