golang proto3的message中奇怪字段XXX_NoUnkeyedLiteral

博客介绍了Protocol Buffers中通过syntax设置语法类型,有proto2和proto3两种。使用proto3会自动生成奇怪字段,初始化结构体较麻烦。还给出了不产生这些字段的生成方式,如protoc - gen - gogofast等,并提供了gogofaster库和proto3用法及Golang protobuf的参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值