Rumah > pembangunan bahagian belakang > Golang > Adakah `google.protobuf.Struct` Pilihan Optimum untuk Menghantar JSON Dinamik melalui gRPC?

Adakah `google.protobuf.Struct` Pilihan Optimum untuk Menghantar JSON Dinamik melalui gRPC?

Patricia Arquette
Lepaskan: 2024-12-11 13:55:11
asal
659 orang telah melayarinya

Is `google.protobuf.Struct` the Optimal Choice for Sending Dynamic JSON via gRPC?

Adakah "google/protobuf/struct.proto" Cara Terbaik untuk Menghantar Dynamic JSON melalui GRPC?

Menggunakan jenis google.protobuf.Struct menyediakan penyelesaian yang cekap untuk menghantar data JSON dinamik melalui GRPC. Pertimbangkan fail User.proto berikut:

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;
}
Salin selepas log masuk

Penyelesaian Anuj:

Walaupun berfungsi, pendekatan ini agak berbelit-belit:

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",
            },
        },
    },
}
Salin selepas log masuk

Penyelesaian Luke:

Kaedah ini lebih ringkas tetapi melibatkan berbilang penukaran:

m := map[string]interface{}{
  "foo":"bar",
  "baz":123,
}
b, err := json.Marshal(m)
s := &structpb.Struct{}
err = protojson.Unmarshal(b, s)
Salin selepas log masuk

Penyelesaian Disyorkan:

Pendekatan paling mudah dan cekap ialah menggunakan fungsi terbina dalam yang disediakan oleh pakej structpb:

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,
}
Salin selepas log masuk

Ingat untuk mematuhi peraturan penukaran yang dinyatakan dalam dokumentasi structpb kepada elakkan kesilapan.

Atas ialah kandungan terperinci Adakah `google.protobuf.Struct` Pilihan Optimum untuk Menghantar JSON Dinamik melalui gRPC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan