>백엔드 개발 >Golang >Go에서 Protobuf 메시지를 생성할 때 OmitEmpty JSON 태그를 방지하려면 어떻게 해야 합니까?

Go에서 Protobuf 메시지를 생성할 때 OmitEmpty JSON 태그를 방지하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-03 22:55:12849검색

How Can I Prevent OmitEmpty JSON Tags When Generating Protobuf Messages in Go?

Go에서 빈 JSON 태그를 생략하지 않고 Proto Buff 생성

JSON 프록시와 함께 gRPC를 사용하면 생성된 구조체에 생략 태그가 자동으로 추가됩니다. JSON 페이로드에 기본값이 포함되어 있지 않기 때문에 메시지를 마샬링할 때 문제가 발생할 수 있습니다.

이 문제를 해결하려면 ServeMux에 다음 옵션을 추가하는 것을 고려하세요.

gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))

이렇게 하면 기본값은 생성된 JSON에 항상 존재합니다.

또는 다음을 사용할 수 있습니다. google.golang.org/protobuf/encoding/protojson 패키지를 사용하여 프로토콜 버퍼 메시지를 마샬링합니다. 이 패키지는 인코딩 프로세스에 대한 더 많은 제어 기능을 제공하며 기본값을 내보내도록 지정할 수 있습니다.

func sendProtoMessage(resp proto.Message, w http.ResponseWriter) {
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    m := protojson.Marshaler{EmitDefaults: true}
    m.Marshal(w, resp) // Check for errors here
}

참고: google.golang.org/protobuf는 더 이상 사용되지 않는 github을 대체했습니다. .com/golang/protobuf 및 해당 jsonpb 패키지.

위 내용은 Go에서 Protobuf 메시지를 생성할 때 OmitEmpty JSON 태그를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.