通过自定义结构体tag来覆盖默认结构体tag:json:"xxx,omitempty" 1. 修改proto文件,增加gotags注释 在需要修改结构体tag的字段上增加注释:// @gotags: json:"region_name" , 覆盖默认生成的结构体tag # modules/resource_manager/idl/region.proto message Region { // @gotags: json:"region_name" string ...
在生成protocol文件后,执行如下命令,去除omitempty标签即可。 Get-ChildItem -Path "C:\path\to\directory" -Recurse -Filter "*.pb.go" | ForEach-Object { $file = $_.FullName $content = Get-Content -Path $file -Encoding UTF8 $newContent = $content -replace ',omitempty', '' Set-Content -P...
Go的json有一个omitempty标签,意思是如果字段为空值,定义为false、0、零指针、nil接口值以及任何空数组、切片、映射或字符串,则该字段在json序列化时省略。 例如下面一段代码: packagemainimport("encoding/json""log")typeAsdqwestruct{Aint32`json:"a,omitempty"`Bbool`json:"b,omitempty"`C[0]int32...
omitempty"`Mmap[string]string`protobuf:"bytes,4,rep,name=m,proto3" json:"m,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`XXX_NoUnkeyedLiteral struct{}`json:"-"`XXX_unrecognized[]byte`json:"-"`XXX_sizecache int32`json:"-"`...
Keystring`protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` } func(x *Request)Reset() { *x = Request{} ifprotoimpl.UnsafeEnabled { mi := &file_geecachepb_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ...
生成后的结构体中的 Id 字段,json tag 值为 id,没有了 omitempty。可以解决很多同学在与前端对接时的一些烦恼。 除此之外还有很多用法,有兴趣的同学可以详细查看More Canonical Go Structures。 为什么官方不支持 那为什么 golang/protobuf 一直不支持这些 protobuf 的扩展功能特性呢?
生成后的结构体中的 Id 字段,json tag 值为 id,没有了 omitempty。可以解决很多同学在与前端对接时的一些烦恼。 除此之外还有很多用法,有兴趣的同学可以详细查看 More Canonical Go Structures[2]。 为什么官方不支持 那为什么 golang/protobuf 一直不支持这些 protobuf 的扩展功能特性呢?
packageuserimport("google.golang.org/protobuf/proto")typeUserRequeststruct{UserIdstring`protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`}typeUserResponsestruct{Namestring`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`Ageint32`protobuf:"varint...
protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty" valid:"required,to=1~3"` // 姓名 @tag valid:"required,to=1~3" Age int32 `protobuf:"varint,2,opt,name=age,proto3" json:"age,omitempty" valid:"to=1~150"` // 年龄 @tag valid:"...
unknownFields protoimpl.UnknownFields 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"` } // 其他生成的...