動的ページを高速に読み込もうとしています。私は学習課題としてツイッタークローンを作っています。私はアプローチの下以下いセッションにキーを保存してページを高速に読み込む
誰かのツイートは、メモリキャッシュ内のデータストアにつぶやきと安全それを格納{key.string()、json.Marshal(ツイート)}
Iは、ツイートをプッシュユーザーのホームタイムラインで。ホームタイムラインは[] * datastore.Keyで、これはユーザーセッションに格納されます(memcacheにコピーされ、DBにコピーされます)。
ユーザーが自分のホームページを開いたとき、ホームページはセッションからキーを取得しようとします。見つからなければデータストアクエリを行います。
私は(デシベルから続いていない場合)memcacheのからのツイートを取得するキーを入手したら
私は正しい情報を取得しています最初のケースでは、ステップ3
で私を立ち往生しています文字列スライス([] * datastore.Keyではなく)にあります。第2のケースで
私はこのエラーを取得
2016年9月3日午後05時23分42秒のhttp:インタフェース 変換:127.0.0.1:47104サービングパニックインターフェース[]は、インターフェース{}、ではありません[]データストア.Key
私が間違っているところを助け、よりよい方法があります。
ケース1
func GetKeys(req *http.Request, vars ...string) []interface{} {
//GetKeys - get the keys
s, _ := GetGSession(req)
var flashes []interface{}
key := internalKey
if len(vars) > 0 {
key = vars[0]
}
if v, ok := s.Values[key]; ok {
// Drop the flashes and return it.
// delete(s.Values, key)
flashes = v.([]interface{})
}
return flashes
}
ケース2
//GetHTLKeys - get the hometimeline keys
func GetHTLKeys(req *http.Request, vars ...string) []datastore.Key {
s, _ := GetGSession(req)
var keyList []datastore.Key
key := internalKey
if len(vars) > 0 {
key = vars[0]
}
if v, ok := s.Values[key]; ok {
keyList = v.([]datastore.Key)
}
return keyList
}
あなたは 'GetGSession'が定義されている方法は? – abhink
これは通常のGorillaセッションです。// GetGSession - func GetGSession(req * http.Request)(セッション*セッションセッション、エラーエラー){ \t session、err = mcdstore.Get(req、 "secondSession") \t申し訳 } –