Я обычно оборачиваю свои зависимости в их собственный пакет, что позволяет мне абстрагироваться от некоторых общих вещей, которые я делаю.Для сессий я обычно использую одно и то же имя сессии большую часть времени, поэтому у меня обычно было бы что-то вроде этого:
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
, чтобы он нигде не зависел, за исключением вашего собственного пакета сессий.