ホームページ >バックエンド開発 >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 で OmitEmpty JSON タグを使用せずにプロト バフを生成する

JSON プロキシで gRPC を使用する場合、生成された構造体にomitempty タグが自動的に追加されます。 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。