pb 定义
message User {
int64 user_id = 1;
}
go 结构体
type User struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
}
如上定义, 生成的结构体在接收 json 参数的时候 传递的参数如下
{"userId":1000}
{"user_id":1000}
如上描述, pb 生成的结构体在接收 json 参数的时候, 对应的参数能接收 user_id 也能接收 userId. 两种风格的参数都能正确传递, 这样虽然可以用, 但是对 api 定义不太严谨. 查阅了一些资料没找到解决方案 希望只能接收一种风格的参数, 要么 user_id 要么 userId
有大佬解答一下吗
1
coderxy 2023-03-22 18:00:13 +08:00
protobuf json tag 搜一下
|
2
crazystory OP @coderxy 感谢
但是现在遇到了新的问题 ``` int64 user_id = 1 [json_name="userId"]; ``` 如果 json_name 定义为 user_id 的情况下 已经不可以接收 userId 这样的驼峰参数 但是如果 json_name 为上面的 userId 依然同时可以接收两种类型的参数 现在考虑到前端的工作量, 计划仅保留驼峰风格 |
3
coderxy 2023-03-22 18:58:01 +08:00
定义两个字段 一个 userId 一个 user_id ,自己在处理时兼容一下
|
4
zizon 2023-03-23 13:46:53 +08:00
https://github.com/golang/protobuf/blob/master/protoc-gen-go/generator/generator.go#L2225
看这里主要看下怎么控制 name/field_name/json_name 统一吧. |