2016-05-28 4 views
1
私は、様々な静的に宣言構造体のタイプに動的キャッシュからデータを取得するために行くにリフレクションを使用してトラブルを抱えている

を使用して、構造体この静的に型指定されたキャッシュデータを反映された値に変換して戻します。gob: local interface type *interface {} can only be decoded from remote interface type; received concrete type ...:¥問題は、動的反射

このデータは、reflectを必要とせずにキャッシュのコードの他の場所に保存されます。

+0

これを試してみてください: 'memcache.Gob.Get(*コンテキスト、cacheKey、fetchFromCache)'(何のアドレスをメモしません'fetchFromCache'の前に'& '演算子をつけてください)。 – icza

+0

うわー、* facepalm *あなたの助けを借りて、この一日を過ごした後、私はついにそれを私自身でほぼ達成することができました。ハ、ありがとう。 –

+0

クイックフォローアップ質問:何らかの理由で、これは上記のコードで 'true'を返していません...'(err == memcache.ErrCacheMiss) '...まだこれは' true'です: '(err! = nil && err.Error()== memcache.ErrCacheMiss.Error()) '....私は文字列の比較を避けることを好むでしょう、これは修正されていますか? –

答えて

1

Codec.Get()は、interface{}にラップされたポインタとして「ターゲット」を想定しています。

fetchFromCacheはすでに指定された型の値(returnType)の値へのポインタで、interface{}にラップされています。だから、Gob.Get()にそれを渡すときに、そのアドレスを取る必要はありません: - であるとして、それを渡す:

_, err=memcache.Gob.Get(*context, cacheKey, fetchFromCache)