[英]How to use camelCase JSON tags for marshaling structs in gRPC generated files in Go?
以下面的結構為例,
type Foo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
IsBar bool `protobuf:"varint,1,opt,name=is_bar,json=isBar,proto3" json:"is_bar,omitempty"`
IsBar
有兩個 JSON 標簽。 當我嘗試 json.Marshal 時,使用了第二個標簽,即 snake_case,但我更喜歡使用 camelCase 之一。 這怎么可能?
使用 protojson 包來編組你的 proto.Message
import(
"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/proto"
)
func Marshal(m proto.Message)([]byte,error){
return (protojson.MarshalOptions{}).Marshal(m)
}
或者試試gofaster 。 這是一個 protoc 插件替代 protoc-gen-go。 它支持字段擴展gogoproto.jsontag ,讓您可以自定義 json 標簽。
syntax = "proto3";
package helloworld.v1;
import "google/api/annotations.proto";
import "gogo/protobuf/gogoproto/gogo.proto";
option go_package = "github.com/pigfall/kratos-test/api/helloworld/v1;v1";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
get: "/helloworld/{name}"
};
}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
string pre_name =2 [(gogoproto.jsontag)="perName"];
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.