beego 的缓存如何转结构体呢?

写入缓存

func SetCategory(category models.Category) {
    _ = BM.Put("category", category, 1000*time.Second)
}

但是获取的时候

func GetCategory() []models.Category {
    category := BM.Get("category")
    fmt.Println(category.([]models.Category))
    return nil
}

这里无法转为结构体
有什么办法转呢?

func (c *CategoryController) Index() {

    var category []models.Category
    category = dao.GetCategory()

    if category == nil {
        m := new(models.Category)

        category, _ = m.GetList()
        dao.SetCategory(category)
    }

    c.Data["category"] = category

    c.TplName = "admin/category/index.html"
}
阅读 3.2k
3 个回答

存的时候用model.Category,转的时候用[]model.Category,类型都不相同,肯定不行。
建议把错误贴出来

声明下,我没用过 beego,按你的问题,看了下它的代码,并写了小例子测试了下。

可以先看下 Cache 接口定义:

type Cache interface {
    Get(key string) interface{}
    GetMulti(keys []string) []interface{}
    Put(key string, val interface{}, timeout time.Duration) error
    Delete(key string) error
    Incr(key string) error
    Decr(key string) error
    IsExist(key string) bool
    ClearAll() error
    StartAndGC(config string) error
}

Put 并不是理解的 list 追加,与 Get 的区别只是多了一个过期时间。所以,你 Put 的是啥,那 Get 就是啥。如果要获取的切片,那 Put 时也必须是切片。

package main

import (
    "fmt"
    "github.com/astaxie/beego/cache"
    "time"
)

type User struct {
    Name string
}

func main() {
    bm, err := cache.NewCache("memory", `{"interval":60}`)
    if err != nil {
        panic(err)
    }

    err = bm.Put("users", []User{{Name: "poloxue"}}, 10*time.Second)
    if err != nil {
        panic(err)
    }

    view := bm.Get("users")
    fmt.Println(view.([]User))
}

目前用的办法为:

func GetCategory() []models.Category {
    category := BM.Get("category")
    if category == nil{
        return nil
    }
    var data []models.Category
    _ = json.Unmarshal(category.([]uint8), &data)

    return data
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏