Go に比較的慣れていないので、何かばかげたことをしているのか (かなりの可能性が高い)、それともバグがあるのか (おそらくばかげたことをしている可能性は低い) はわかりません。Beego のファイルシステム キャッシュを使用して 2 つのファイルシステム キャッシュがあります。これらは 2 つの別個のフォルダーです。各キャッシュに書き込もうとすると、結果が混乱する値を取得しようとします。MyCache の作成は、Init() 関数で OtherCache によってオーバーライドされることがわかります。
package main
import (
"github.com/astaxie/beego/cache"
"log"
)
var (
MyCache cache.Cache
OtherCache cache.Cache
err error
)
func Init() {
if MyCache, err = cache.NewCache("file", `{"CachePath":".cache/mycache","FileSuffix":".cache","DirectoryLevel":1,"EmbedExpiry":10}`); err != nil {
log.Println(err)
}
if OtherCache, err = cache.NewCache("file", `{"CachePath":".cache/othercache","FileSuffix":".cache","DirectoryLevel":1,"EmbedExpiry":10}`); err != nil {
log.Println(err)
}
}
func checkCache(c cache.Cache, k string) string {
b := c.Get(k)
return b.(string)
}
func writeCache(c cache.Cache, k string, v string) {
if err := c.Put(k, v, 10); err != nil {
log.Println(err)
}
}
func main() {
log.SetFlags(log.Lshortfile)
Init()
log.Println(MyCache)
log.Println(OtherCache)
// write to MyCache
mykey := "mykey"
myvalue := "myvalue"
writeCache(MyCache, mykey, myvalue)
// write to OtherCache
othervalue := "othervalue"
writeCache(OtherCache, mykey, othervalue)
// Get MyCache value
myv := checkCache(MyCache, mykey)
log.Println("MyCache:", myv, myv == myvalue)
// Get OtherCache value
otherv := checkCache(OtherCache, mykey)
log.Println("OtherCache:", otherv, otherv == othervalue)
}
結果:
tester.go:34: &{/home/desktop-admin/Desktop/eclipse/go/src/testfolder/tester/.cache/othercache .cache 2 0}
tester.go:35: &{/home/desktop-admin/Desktop/eclipse/go/src/testfolder/tester/.cache/othercache .cache 2 0}
tester.go:47: MyCache: othervalue false
tester.go:51: OtherCache: othervalue true
この出力の最初の行は、「othercache」ではなく「mycache」を指している必要があります。また、この出力の 3 行目は間違っています...値は「othervalue」ではなく「myvalue」である必要があります。
ここで何か間違ったことをしていますか?(私の他のオプションは、1つのファイルシステムキャッシュを作成してキーを変更することですが、2つの異なるフォルダーを管理し、必要に応じてキャッシュ全体を簡単に削除する方がはるかに簡単です....ここで何が間違っているのか知りたいです。でも)