Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menyahmarshal Penampan Protokol Tidak Diketahui dalam Go?
Menyahmarshaling Penampan Protokol Tidak Diketahui dalam Go
Apabila bekerja dengan penampan protokol (protobuf), anda mungkin menghadapi situasi di mana jenis mesej diterima tidak diketahui. Ini boleh timbul apabila mendengar mesej daripada berbilang sumber atau apabila berurusan dengan jenis mesej dinamik atau tidak dapat diramalkan.
Fungsi Unmarshal lalai Protobuf memerlukan jenis mesej tertentu untuk dihantar sebagai hujah, tetapi ini tidak boleh dilaksanakan apabila mesej jenis tidak diketahui. Pendekatan biasa ialah cuba menyahmarshal ke dalam antara muka{}, tetapi ini tidak disokong oleh pustaka Protobuf.
Menangani Had
Untuk mengendalikan mesej yang tidak diketahui, adalah perlu untuk melaksanakan pendekatan tersuai. Satu penyelesaian ialah menggunakan pakej protowire, yang menyediakan akses peringkat rendah kepada perwakilan wayar bagi mesej protobuf.
Menghuraikan Mesej Tidak Diketahui
Coretan kod berikut menunjukkan cara untuk menghuraikan dan mengekstrak maklumat daripada mesej protobuf yang tidak diketahui:
type Field struct { Tag Val } type Tag struct { Num int32 Type protowire.Type } type Val struct { Payload interface{} Length int } func parseUnknown(b []byte) []Field { // ... }
The Fungsi parseUnknown berulang melalui tatasusunan bait, menggunakan medan dan mengekstrak maklumat asas tentang setiap teg dan nilai medan.
Mengekstrak Muatan
Muatan nilai yang diekstrak boleh disimpan dalam pelbagai struktur data, bergantung pada jenis dan kandungan medan yang dijangkakan. Contohnya:
switch t { case protowire.VarintType: v, vlen := protowire.ConsumeVarint(b[taglen:fieldlen]) case protowire.Fixed64Type: v, vlen := protowire.ConsumeFixed64(b[taglen:fieldlen]) // ... }
Batasan dan Pertimbangan
Pendekatan ini mempunyai had tertentu:
Alternatif untuk Menghuraikan Mesej Tidak Diketahui
Dalam kebanyakan senario, lebih baik mendekati isu yang tidak diketahui mesej dari perspektif yang berbeza, seperti sebagai:
Pendekatan yang diterangkan dalam artikel ini menyediakan cara untuk mengekstrak maklumat asas daripada mesej protobuf yang tidak diketahui, tetapi ia harus digunakan sebagai penyelesaian sandaran apabila pilihan lain tidak dapat dilaksanakan.
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Penampan Protokol Tidak Diketahui dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!