利用 google.protobuf.Struct 類型提供了一種有效的解決方案用於透過 GRPC 傳輸動態 JSON 資料。考慮以下User.proto 檔案:
syntax = "proto3"; package messages; import "google/protobuf/struct.proto"; service UserService { rpc SendJson (SendJsonRequest) returns (SendJsonResponse) {} } message SendJsonRequest { string UserID = 1; google.protobuf.Struct Details = 2; } message SendJsonResponse { string Response = 1; }
Anuj 的解決方案:
雖然有效,但這種方法有點複雜:
var item = &structpb.Struct{ Fields: map[string]*structpb.Value{ "name": &structpb.Value{ Kind: &structpb.Value_StringValue{ StringValue: "Anuj", }, }, "age": &structpb.Value{ Kind: &structpb.Value_StringValue{ StringValue: "Anuj", }, }, }, }
路克的解決方案:
此方法比較簡潔,但涉及多次轉換:
m := map[string]interface{}{ "foo":"bar", "baz":123, } b, err := json.Marshal(m) s := &structpb.Struct{} err = protojson.Unmarshal(b, s)
推薦方案:
推薦方案:m := map[string]interface{}{ "name": "Anuj", "age": 23, } details, err := structpb.NewStruct(m) // Check for errors as per documentation if err != nil { panic(err) } userGetRequest := &pb.SendJsonRequest{ UserID: "A123", Details: details, }
最直接高效方法是利用structpb提供的內建函數package:請記得遵守 structpb 文件中指定的轉換規則,以避免錯誤。
以上是`google.protobuf.Struct` 是透過 gRPC 發送動態 JSON 的最佳選擇嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!