Golang中国

现在的问题是。我这边的 SessionGet 返回接口。这个要怎么修改可以。获取到返回值直接就可以使用。

func main() {
    http.HandleFunc("/", test)
    http.ListenAndServe(":8080", nil)
}

func test(w http.ResponseWriter, req *http.Request) {
    session := lib.Session_start(w, req, "")

    session.SessionSet("test", []int{1, 2, 3})
    val := session.SessionGet("test")
    fmt.Println(val)
    for _, v := range val1 {
        fmt.Println(v)
    }
    w.Write([]byte("ss"))
}

 //session 构造体
type Session struct {
    Session_Id string                 //session id
    Value      map[string]interface{} //session 保留的数据

}
//session 数据设置
func (this *Session) SessionSet(key string, val interface{}) bool {
    //赋值
    this.Value[key] = val
    //将session 数据写入文件
    return this.sessionDataSave()
}

//session 获取
func (this *Session) SessionGet(key string) interface{} {
    val, val_err := this.Value[key]
    if val_err == false {
        return nil
    }

    return val
}
5 回复
heimeil
#1 heimeil • 2017-01-09 14:12
val, ok := session.SessionGet("test").([]int)
if ok {
    // xxx
}
xiaochuan
#2 xiaochuan • 2017-01-09 14:31

有没有那种可以直接封装到SessionGet 这个方法里面的写法

ygqwan
#3 ygqwan • 2017-01-12 22:53

可以写几个常用类型的Get函数,比如session.SessionGetIntSlice,session.SessionGetInt32Slice这种函数直接返回你想要的类型。大家还有什么好的想法也@下我

xiaochuan
#4 xiaochuan • 2017-01-16 13:52

@ygqwan 你的意思是把所有的对应类都封装成对应的方法。

fotomxq
#5 fotomxq • 2017-01-20 08:23

我曾经试着封装过,楼主可以参考一下。
https://git.oschina.net/fotomxq/collmz/blob/dev2.0/core/session-operate.go?dir=0&filepath=core%2Fsession-operate.go
不过不建议这么搞,用现有的第三方库效率最高。
github.com/gorilla/sessions
因为一般应用只在cookie存储一个标识码就可以,不需要存大量信息。所以用什么实现都无所谓。

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。

作者

xiaochuan
没有签名

发表话题

作者其它话题