
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 统一吧. |