为 protobuf golang 结构体注入自定义标签
protoc-go-inject-tag 为什么? Golang protobuf 不支持自定义标签生成结构体。此工具会将自定义标签注入到生成的 protobuf 文件中,通常用于验证字段、从 JSON 数据中删除字段等。 安装 - protobuf 版本 3 对于 OS X: console brew install protobuf - go 支持 protobuf: go get -u GitHub.com/golang/protobuf/{proto,protoc-gen-go} - go install GitHub.com/favadi/protoc-go-inject-tag@latest 或从版本页面下载二进制文件。 使用 console $ protoc-go-inject-tag -h protoc-go-inject-tag 的使用: -XXXskip 字符串标签,应忽略未知字段(自 protoc-gen-go v1.4.0 以来已过时) -input 字符串模式,匹配输入文件 -verbose 详细日志 -removetagcomment 从生成的文件中删除标签注释 在字段前添加以下语法的注释,这些注释将被注入到生成的 .pb.go 文件中。 可以在字段前指定,也可以在字段后指定。 proto // @gotags: customtag:"customvalue" 示例 proto // file: test.proto syntax = "proto3"; package pb; option gopackage = "/pb"; message IP { // @gotags: valid:"ip" string Address = 1; // 或: string MAC = 2; // @gotags: validate:"omitempty" } 使用 protoc 命令正常生成您的 .pb.go 文件: console protoc --protopath=. --goout=paths=sourcerelative:. test.proto 然后使用 protoc-go-inject-tag 处理生成的文件(例如 test.pb.go): console $ protoc-go-inject-tag -input=./test.pb.go 或 $ protoc-go-inject-tag -input=".pb.go" 自定义标签将被注入到 test.pb.go 中: go 类型 IP 结构 { // @gotags: valid:"ip" Address string protobuf:"bytes,1,opt,name=Address,json=address" json:"Address,omitempty" valid:"ip" } 从生成输出中移除 gotag 注释 使用 -removetagcomment 标志,您可以删除生成代码上通常标注的 gotag 注释。这允许更加无缝地支持像 swag/openapi 生成器这样的库,这些库使用代码注释来生成 openapi 文件。 已过时的功能 跳过 XXX 字段 要跳过生成的 XXX 字段(未知字段)的标签,请使用 -XXXskip=yaml,xml 标志。这已过时,因为…
暂无开放 Issues,或尚未同步最近议题。