当前位置: 首页 > 面试题库 >

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

易飞文
2023-03-14
问题内容

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



 类似资料:
  • 问题内容: 如果我的Golang软件包名称是以下内容之一,是否可以使用该名称构建(安装,获取等)可执行文件: 并在包根目录中? 问题答案: go build -o 您可以使用-o开关使用来指定可执行文件名称。为了您例如,它会看起来像: 。但是,您只剩下软件包文件夹中的可执行文件-您仍然需要以某种方式安装它。 但是,我不知道为使用安装工具的人指定哪种方法。 如果您不担心有人使用来安装工具,则可以将其

  • 问题内容: 例如,我想在一个源文件中同时使用text / template和html / template。但是下面的代码会引发错误。 问题答案: 在规范中阅读有关它的更多信息。

  • 问题内容: 我正在使用go 1.5.3。我跑了 我收到此错误消息: 我该如何解决? 问题答案: 从《枸杞》第13期中,正确的命令是: 该页面具有meta指令: 这样,go不会考虑(例如参见)尝试导入“第三方”的内部软件包。 此问题说明了错误的内部导入情况: 您不允许导入第三方存储库的内部包(或其子包)。

  • 问题内容: 我正在使用Go 1.9.2创建一个应用,并且试图在构建过程中使用选项向其添加版本字符串变量。 我已经通过使用:在包中设置了一个变量,但是我真正需要的是在包中而不是在其中设置变量。这可能吗? 这是我的构建命令: 问题答案: 引用命令链接文档: 因此,它可以用于任何包装,而不仅仅是包装。但是您必须指定完整的 导入路径 ,而不仅仅是软件包名称。 例如,如果您的软件包位于,则使用以下命令:

  • 问题内容: 我正在开发我的第一个Java应用程序,它实际上需要一个3rd party软件包,但现在我迷失了如何实际使用它。我需要的软件包来自VLCJ,因此我可以将媒体播放器嵌入GUI中。 通常,我只能导入包和类,但是使用第三方包可以吗?他们有一个.jar文件可以在他们的网站上下载,软件包是否存储在其中?如果是这样,我该如何在自己的应用程序中使用它们? 问题答案: 您只需要将第三方JAR放在项目的类

  • 问题内容: 我似乎无法弄清楚。我当时用我的Windows pc来开发并部署到Linux机器上就很好了,突然之间,我无法再编译任何东西了,甚至连一个简单的hello world程序都没有。可能是Windows更新之后。我所做的所有事情都会出现这种错误: 像往常一样正确设置了GOROOT和GOPATH,但是找不到任何包。这在我拥有的每个包装上均失败。上面的程序是软件包“ main”的一部分 我已经将G