Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengalih keluar Teg `omitempty` daripada Output JSON Protobuf GoLang?

Bagaimana untuk Mengalih keluar Teg `omitempty` daripada Output JSON Protobuf GoLang?

DDD
DDDasal
2024-12-30 05:55:09377semak imbas

How to Remove `omitempty` Tags from GoLang Protobuf JSON Output?

Mengalih keluar Teg Omitempty daripada Teg JSON Dijana dalam Protobuf GoLang

Dalam Google gRPC dengan proksi JSON, anda mungkin menghadapi senario yang anda perlukan untuk mengalih keluar tag omitempty daripada struct yang dihasilkan dalam fail .pb.go. Keperluan ini timbul untuk memastikan kehadiran nilai lalai semasa JSON marshaling.

Untuk menangani isu ini, anda boleh melaksanakan strategi berikut:

Untuk Pengguna grpc-gateway:

Tambah pilihan berikut semasa membuat anda servemux:

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

Di luar grpc-gateway:

Gunakan pakej google.golang.org/protobuf/encoding/protojson untuk menyusun mesej Protobuf anda. Pakej ini telah menggantikan pakej github.com/golang/protobuf/jsonpb yang telah ditamatkan.

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) // Handling of potential errors is recommended
}

Dengan mengikut pendekatan ini, anda boleh mengalih keluar teg omitempty secara berkesan daripada teg JSON yang dijana dalam GoLang Protobuf, memastikan kemasukan daripada nilai lalai semasa JSON marshaling.

Atas ialah kandungan terperinci Bagaimana untuk Mengalih keluar Teg `omitempty` daripada Output JSON Protobuf GoLang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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