Protocol Buffers中,通过syntax设置语法类型,有proto2和proto3两种语法。当使用proto3时,会自动生成奇怪的字段,如XXX_NoUnkeyedLiteral、XXX_unrecognized、XXX_sizecache等。
# 生成命令:protoc --go_out=. pf.proto
type Person struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Id int32 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"`
Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
Phones []*Person_PhoneNumber `protobuf:"bytes,4,rep,name=phones,proto3" json:"phones,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
而生成的上述结构体在初始化的时候稍显麻烦,如果想在生成pf.pb.go文件时,不产生上述字段,可使用gogofaster
生成。
# 生成命令:protoc --gogofaster_out=. pf.proto
protoc-gen-gogofast (same as gofast, but imports gogoprotobuf)
protoc-gen-gogofaster (same as gogofast, without XXX_unrecognized,less pointer fields)
protoc-gen-gogoslick (same as gogofaster, but with generated string, gostring and equal methods)
gogofaster库的用法参考链接:https://studygolang.com/articles/19114?fr=sidebar
proto3用法参考链接:https://blog.csdn.net/weixin_33936401/article/details/88252538
Golang protobuf: https://www.jianshu.com/p/7e3dcfbc5fd7