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 サイトの他の関連記事を参照してください。