問題タブ [gob]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2576 参照

go - Go エラー: gob: type sync.Mutex にエクスポートされたフィールドがありません

export がある場合、構造体を gob として保存できないという問題がありますsync.Mutex。ミューテックスをアンエクスポートすると(大文字にしないことで)、すべてが機能するようです。これがなぜなのかを理解し、エクスポートされていないsync.Mutex.

に関連する問題について Google でいくつかのヒットがあるsync.RWMutexようですが、これがなぜ起こるのかを実際に説明しているものはありません。

出力:

エラー: gob: type sync.Mutex にエクスポートされたフィールドがありません

0 投票する
1 に答える
1118 参照

pointers - Gob は nil ポインター値でマップをエンコードできません

値の 1 つが nil の場合、マップをポインターにエンコードしようとすると、Gob の Encode がエラーを返します。これはドキュメントと矛盾しているようです(ただし、意味を誤解している可能性があります):

スライスと配列、およびマップでは、たとえすべての要素がゼロであっても、すべての要素 (値がゼロの要素も含む) が転送されます。

コード:

出力:

この場合、ゴブが失敗する正当な理由はありますか? 2 つの明白なオプションのどちらかが失敗よりも望ましいようです: 1) ゼロ値の値を持つキーをエンコードしない、または 2) 値がゼロ値であってもすべてのキーをエンコードします。現在の状態では、構造体を再帰的にスキャンして nil マップ値があるかどうかを確認し、ある場合はそれらのキーを削除するのがベスト プラクティスですか? このチェックが必要な場合は、ユーザーではなく、encoding/gob パッケージの責任であるように思われます。

さらに、値の型がスライスの場合は nil が受け入れられるため、ルールは単純に「キーの値が nil のマップを gob でエンコードできない」というわけではありません。