登录
首页 >  Golang >  Go问答

在Golang中如何在不同的包中使用 Gorilla Session

来源:stackoverflow

时间:2024-03-21 11:43:28 326浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《在Golang中如何在不同的包中使用 Gorilla Session》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我有主包(main.go):

package main

import (
  "github.com/gorilla/sessions"
  ...
)

func main() {
  var store = sessions.newcookiestore([]byte("secret"))

  http.handlefunc("/", routes.index)

  http.listenandserve(":8080", nil)
  ...

我还有另一个包(index.go):

package routes

import (
  "github.com/gorilla/sessions"
  ..
)

func Index(res http.ResponseWriter, req *http.Request) {
  session, _ := store.Get(req, "session-name")
  ...

如何从另一个包中获取会话值?或者我应该将它传递给我的处理程序(如果是的话该怎么做?)。

我是 golang 新手。请帮忙。


解决方案


我通常将我的依赖项包装在它们自己的包中,这让我可以抽象出我所做的一些常见事情。对于会话,我通常在大多数情况下使用相同的会话名称,因此我通常会有这样的内容:

package sessions

import (
    "os"
    gsessions "github.com/gorilla/sessions"
)

var store = gsessions.newcookiestore([]byte(os.getenv("session_key")))

func get(req *http.request) (*gsessions.session, error) {
    return store.get(req, "default-session-name")
}

func getnamed(req *http.request, name string) (*gsessions.session, error) {
    return store.get(req, name)
}

然后您可以在其他任何地方导入自己的会话包:

import (
    "net/http"
    "github.com/yourpackage/sessions"
)

func Index(rw http.ResponseWriter, r *http.Request) {
    session, err := sessions.Get(r)
    if err != nil {
        panic(err)
    }
    session.Values["test"] = "test"
    session.Save(r, rw)
}

更好的是只从会话中返回某种 interface ,并完全包装 gorilla/sessions ,以便除了您自己的会话包之外的任何地方都不依赖于它。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>