我通常将依赖项包装在自己的程序包中,这让我抽象了一些我做的常见事情。对于会话,我通常大部分时间都使用相同的会话名称,因此通常会有以下内容:
package sessionsimport ( "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这样除了您自己的会话包之外,任何地方都不依赖它。



