11.处理模型中json tag不一致的问题

处理模型中json tag不一致的问题

举个例子服务端返回的地址插件如下,使用的tag所以服务端返回的json字段名为pid,和pname

type ProdModel struct {
    ProdId   int    `json:"pid"`
    ProdName string `json:"pname"`
}

然而我们proto文件定义的是这样的,很明显两个字段名字对不上,那么我们用proto文件生成的model去解析response的时候就会解析不出来了

message ProdModel {
    int32 ProdID = 1;
    string ProdName = 2;
}

使用一个第三方插件来解决这个问题

修改一下proto文件,在proto中加上这样的注释,就会在生成pb文件的时候把所需要的tag改掉

syntax = "proto3";
package Models;

message ProdModel {
    // @inject_tag: json:"pid"
    int32 ProdID = 1;
    // @inject_tag: json:"pname"
    string ProdName = 2;
}

message ProdRequest {
    int32 size = 1;
}

message ProdListResponse {
    repeated ProdModel data = 1;
}

执行这两条命令,注意有先后顺序,要先生成了pb文件,才能用这个第三包去修改他的tag

protoc --micro_out=../ --go_out=../ Prods.proto
protoc-go-inject-tag -input=../Prods.pb.go




原文地址:https://www.cnblogs.com/hualou/p/12103678.html