8

gob_encode(x) と gob_encode(y) の出力が常に同じになることを、x が y と等しいような 2 つの Go オブジェクト x、y (インターフェイスとマップにトリッキーさがなく、構造体と配列だけを想定) を期待できますか?

編集 (2018 年 6 月 8 日):

マップが関係している場合、gob エンコーディングは非決定論的です。これは、マップの反復順序がランダムであるため、シリアル化がランダムに順序付けられることになります。

4

3 に答える 3

4

おそらく、受け入れられた答えが正しくないことに注意する必要があります: encoding/gob は決定論的な方法でマップ要素を順序付けません: https://play.golang.org/p/Hh3_5Kb3Znn

エンコーディング/ゴブをフォークし、ストリームに書き込む前にマップをキーで並べ替えるコードを追加しました。これはパフォーマンスに影響しますが、私の特定のアプリケーションは高いパフォーマンスを必要としません。カスタムマーシャラーはこれを壊す可能性があるので、注意して使用してください: https://github.com/dave/stablegob

于 2018-06-07T04:59:02.947 に答える