我有主软件包(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这样除了您自己的会话包之外,任何地方都不依赖它。
interface
gorilla/sessions