起因
在一个老项目里面直接用的 protobuf 生成的结构体与数据库交互
在 protoc 2 生成的 protobuf 没有 XXX 这些东西生成故能正常运行
因为版本升级到 protoc 3 后编译的 protobuf 就不能正常运行了,会出现数据库找不到 XXX_ 这些字段的情况
解决方案
把每张表单独生成 struct 放在 models 层里面,这样的话老服务改动太大我肯定是不能接受的
因为我们使用的 orm ,在xorm 中如果 struct 某个字段不需要映射的话就可以用 xorm:"-"
gorm 也可以这样操作 gorm:"-"
那我们就可以在 XXX_ 这些字段后面的 tag 中添加忽略,就可以实现我们的目表
开始搞事情
获取代码
go get github.com/golang/protobuf/protoc-gen-go
修改代码
在路径 github.com/golang/protobuf/protoc-gen-go/generator/generator.go 下找到 generateInternalStructFields 方法
在XXX_ 后添加 xorm:"-" or gorm:"-"
// generateInternalStructFields just adds the XXX_ fields to the message struct.
func (g *Generator) generateInternalStructFields(mc *msgCtx, topLevelFields []topLevelField) {
g.P("XXX_NoUnkeyedLiteral\tstruct{} `json:\"