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)
권장 해결 방법:
가장 간단하고 효율적인 방법 접근 방식은 structpb에서 제공하는 내장 함수를 활용하는 것입니다. package:
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 문서에 지정된 변환 규칙을 준수해야 합니다.
위 내용은 `google.protobuf.Struct`는 gRPC를 통해 동적 JSON을 보내기 위한 최적의 선택인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!