gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:35:50 26 4
gpt4 key购买 nike

我有主包(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")
...

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

我是 Golang 的新手。请帮忙。

最佳答案

我通常将我的依赖项包装在它们自己的包中,这样我就可以抽象出我所做的一些常见事情。对于 session ,我通常大部分时间都使用相同的 session 名称,所以我通常会有这样的东西:

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)
}

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

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)
}

更好的方法是只从 session 中返回某种类型的接口(interface),并完全包装gorilla/sessions,这样除了您自己的 session 包。

关于session - 如何在不同的包中使用 Golang 中的 Gorilla Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54028304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com