Rumah > pembangunan bahagian belakang > Golang > Adakah Pengekodan `pengekodan/gob` Go Deterministik, dan Bagaimana Output Deterministik Boleh Dicapai?

Adakah Pengekodan `pengekodan/gob` Go Deterministik, dan Bagaimana Output Deterministik Boleh Dicapai?

Linda Hamilton
Lepaskan: 2024-12-02 03:50:10
asal
347 orang telah melayarinya

Is Go's `encoding/gob` Encoding Deterministic, and How Can Deterministic Output Be Achieved?

Determinisme dalam Pengekodan/Gob

Latar Belakang

Apabila mengekod objek jenis x dan y ke dalam format GOB, jangkaan biasa ialah gob_encode(x) dan gob_encode(y) akan sentiasa menghasilkan jujukan bait yang sama, memandangkan objek adalah sama.

Determinisme Pengekodan GOB

pengekodan/gob menyediakan pelaksanaan pengekodan GOB yang tidak pasti apabila peta terlibat . Ketidakpastian ini timbul daripada susunan lelaran sewenang-wenangnya peta, yang membawa kepada tertib siri yang tidak konsisten semasa pengekodan.

Impak Penentu Jenis

Walau bagaimanapun, untuk nilai bukan peta, pengekodan /gob melaksanakan pendekatan deterministik. Ini kerana setiap item data dalam aliran GOB diawali dengan penentu jenis. Kejadian pertama jenis dalam aliran termasuk definisi jenis lengkap. Kejadian seterusnya daripada jenis yang sama merujuk kepada spesifikasi jenis awal menggunakan rujukan atau pengecam.

Contoh

Dalam contoh berikut, kami mencipta Int struct tersuai dan mengekodnya beberapa kali menggunakan gob pengekod.

type Int struct{ X int }
b := new(bytes.Buffer)
e := gob.NewEncoder(b)
e.Encode(Int{1})
fmt.Println(b.Bytes())
e.Encode(Int{1})
fmt.Println(b.Bytes())
Salin selepas log masuk

Output:

[23 255 129 3 1 1 3 73 110 116 1 255 130 0 1 1 1 1 88 1 4 0 0 0 5 255 130 1 2 0]
[23 255 129 3 1 1 3 73 110 116 1 255 130 0 1 1 1 1 88 1 4 0 0 0 5 255 130 1 2 0 5 255 130 1 2 0]
Salin selepas log masuk

Walaupun pengekodan awal termasuk definisi jenis penuh, pengekodan seterusnya hanya menghantar rujukan jenis, menghasilkan jujukan bait yang berbeza.

Implikasi

Secara umumnya, melainkan anda benar-benar memerlukan output deterministik, tidak perlu mengambil berat tentang tingkah laku yang disebutkan di atas.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa output deterministik boleh dicapai dengan mengelakkan penggunaan peta dan dengan menggunakan berbilang pengekod yang serupa susunan nilai yang dikodkan.

Selain itu, perubahan dalam pelaksanaan pengekodan/gob antara keluaran Go mungkin menjejaskan konsistensi daripada keluaran. Keserasian dikekalkan, tetapi output yang tepat mungkin berbeza-beza.

Atas ialah kandungan terperinci Adakah Pengekodan `pengekodan/gob` Go Deterministik, dan Bagaimana Output Deterministik Boleh Dicapai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan