【发布时间】:2014-06-12 09:36:56
【问题描述】:
如何在Revel上使用基于redis的会话?
我找到了this gist,但是不知道怎么用..
编辑#1:
我的环境变量
GOROOT --> /usr/lib/go
GOPATH --> /home/asd/Dropbox/go
我做了什么:
mkdir -p $GOPATH/src/myapp/app/libs/session
curl https://gist.githubusercontent.com/xthexder/9026678/raw/9e40fb56d8991de945a2064b6869bb7280b1305a/session.go \
> $GOPATH/src/myapp/app/libs/session/session.go
go get github.com/garyburd/redigo
go get github.com/robfig/revel
在init.go 上添加import "myapp/app/libs/session",就会出现这个错误:
Go Compilation Error
The Go code Dropbox/go/src/myapp/app/libs/session/session.go does not compile: undefined: Redis
In Dropbox/go/src/myapp/app/libs/session/session.go (around line 75)
70: panic("Session values may not have null bytes")
71: }
72: sessionValue += "\x00" + key + ":" + value + "\x00"
73: }
74:
75: redisConn := Redis.Get()
76: defer redisConn.Close()
77:
78: params := []interface{}{"session:" + sessionToken, sessionValue}
79: if expireAfterDuration != 0 {
控制台上的错误:
WARN 2014/06/11 20:11:15 build.go:132: Cannot determine git repository version: exit status 128
ERROR 2014/06/11 20:11:15 build.go:84: # myapp/app/libs/session
Dropbox/go/src/myapp/app/libs/session/session.go:75: undefined: Redis
Dropbox/go/src/myapp/app/libs/session/session.go:126: undefined: Redis
Dropbox/go/src/myapp/app/libs/session/session.go:129: not enough arguments in call to redis.String
Dropbox/go/src/myapp/app/libs/session/session.go:172: undefined: Redis
Dropbox/go/src/myapp/app/libs/session/session.go:175: not enough arguments in call to redis.Int
【问题讨论】:
-
到目前为止您尝试过什么? Gist 相当全面:它有一个 init() 函数、保存和恢复 (get) 会话函数(这些函数会进入您的 HTTP 处理程序)、一个撤销会话助手和一个中间件。
-
首先,我应该把那个文件(session.go)放在哪里?
-
最终没关系,但为了简单起见:把它和其他所有东西放在你的主包中。 Go 看不到文件,但看不到包。我建议完整阅读 Effective Go(Google it)和 Revel 文档,或者使用一组更简单的工具来学习(net/http、Gorilla 或 Goji)。基于 Redis 的会话很棒,但听起来你有点超前(通过 HTTPS 加密的 cookie 仍然很好;只是不要在其中存储敏感内容)。
-
你应该坐下来阅读tip.golang.org/doc/effective_go.html。
-
是的,这是我学习 Go 的第三天,两天前我阅读了
Go Programming Language Phrasebook和Programming in Go,昨天我阅读了 Revel 教程和文档,无论如何谢谢..