問題タブ [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.
go - Go エラー: gob: type sync.Mutex にエクスポートされたフィールドがありません
export がある場合、構造体を gob として保存できないという問題がありますsync.Mutex
。ミューテックスをアンエクスポートすると(大文字にしないことで)、すべてが機能するようです。これがなぜなのかを理解し、エクスポートされていないsync.Mutex
.
に関連する問題について Google でいくつかのヒットがあるsync.RWMutex
ようですが、これがなぜ起こるのかを実際に説明しているものはありません。
出力:
エラー: gob: type sync.Mutex にエクスポートされたフィールドがありません
pointers - Gob は nil ポインター値でマップをエンコードできません
値の 1 つが nil の場合、マップをポインターにエンコードしようとすると、Gob の Encode がエラーを返します。これはドキュメントと矛盾しているようです(ただし、意味を誤解している可能性があります):
スライスと配列、およびマップでは、たとえすべての要素がゼロであっても、すべての要素 (値がゼロの要素も含む) が転送されます。
コード:
出力:
この場合、ゴブが失敗する正当な理由はありますか? 2 つの明白なオプションのどちらかが失敗よりも望ましいようです: 1) ゼロ値の値を持つキーをエンコードしない、または 2) 値がゼロ値であってもすべてのキーをエンコードします。現在の状態では、構造体を再帰的にスキャンして nil マップ値があるかどうかを確認し、ある場合はそれらのキーを削除するのがベスト プラクティスですか? このチェックが必要な場合は、ユーザーではなく、encoding/gob パッケージの責任であるように思われます。
さらに、値の型がスライスの場合は nil が受け入れられるため、ルールは単純に「キーの値が nil のマップを gob でエンコードできない」というわけではありません。