dongya6381 2019-01-03 19:01
浏览 209
已采纳

如何在Golang中以不同的软件包使用Gorilla Sessions

I have main package (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)
  ...

And I have another package (index.go):

package routes

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

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

How can I get session value from another package? Or should I pass it to my Handler (if yes how to do it?).

I am new in Golang. Please, help.

  • 写回答

1条回答 默认 最新

  • duanjia2415 2019-01-03 20:38
    关注

    I generally wrap my dependencies in their own package, which let's me abstract away some of the common things I do. For sessions, I usually use the same session name most of the time, so I would usually have something like this:

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

    And then anywhere else you can just import your own sessions package:

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

    Even better would be to only return an interface of some sort from sessions, and completely wrap the gorilla/sessions so that aren't dependent on it anywhere except for your own sessions package.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥15 有人会思科模拟器嘛?
    • ¥30 遇到一个的问题,请教各位
    • ¥20 matlab报错,vflux计算潜流通量
    • ¥15 我该如何实现鼠标按下GUI按钮时就执行按钮里面的操作的方法
    • ¥15 关于#硬件工程#的问题:我这边有个锁相环电路没有效果
    • ¥15 20款 27寸imac苹果一体机装win10后,蓝牙耳机和音响放歌曲卡顿断断续续.
    • ¥15 VB.NET 父窗体调取子窗体报错
    • ¥15 python海龟作图如何改代码使其最后画出来的是一个镜像翻转的图形
    • ¥15 我不明白为什么c#微软的官方api浏览器为什么不支持函数说明的检索,有支持检索函数说明的工具吗?
    • ¥15 在我想检测ros是否成功安装时输入roscore出现以下