同資料庫介面一樣,Go官方也只提供了Session標準介面,並未提供官方實現。本文用iris框架自帶的session管理器,實現一個簡單訪問計數器,以演示session在Iris框架mvc應用內的呈現,全文程式碼量不超50行。
流程
框架應用為基礎,MVC應用依賴框架應用擴充套件而成,控制器例項註冊在MVC應用上。繫結在MVC應用上的依賴項,可被MVC應用下的多個控制器所共享,當然控制器也可自行繫結依賴,自定義依賴項。
- .建立app應用,session管理器例項
- 生成 mvc應用例項,定義根路由
- 定義控制器結構體及其方法
- 繫結mvc應用依賴,註冊訪問控制器,隱式生成相應的路由
- 測試
控制器
VisitController
結構體欄位,又稱依賴集,可為任意型別。
通常接收的入參為context返回單值函式型別,由該控制器自行解析,稱之為動態繫結。
// VisitController handlers
type VisitController struct {
Session *sessions.Session
StartTime time.Time
}
// Get handles
// Method: GET
// Path: http://localhost:8080
func (c *VisitController) Get() string {
visits := c.Session.Increment("visits", 1)
since := time.Now().Sub(c.StartTime).Seconds()
return fmt.Sprintf("訪問 %d 次 當前session上線 %0.1f 秒內", visits, since)
}
建立應用
visitApp.Register
內會繫結依賴到MVC應用上,若依賴值為,可接收Context型別入參且返回單值的函式型別,那麼該函式將被當前控制器解析(呼叫)。每次請求進入控制器,控制器將會自動呼叫帶Context引數的依賴函式,並將計算結果給予對應返回值型別的欄位,在此sess.Start 函式值對應為欄位*sessions.Session
。如果依賴集無欄位或依賴欄位被用作函式的入參,那麼這些依賴將在伺服器執行之前被忽略。
故mvc應用上繫結多個依賴值,可在其下不同的控制器內使用。
func newApp() *iris.Application {
app := iris.New()
sess := sessions.New(sessions.Config{Cookie: "mysession_cookie_name"})
visitApp := mvc.New(app.Party("/"))
// 繫結 *session.Session 到 `VisitController.Session`,time.Now() 到 `VisitController.StartTime` 欄位
visitApp.Register(
sess.Start, // 函式型別 動態繫結 被控制器自動呼叫解析
time.Now(),
)
// 註冊控制器,並隱式生成相應路由
visitApp.Handle(new(VisitController))
return app
}
測試
1. 開啟瀏覽器
2. 訪問 http://localhost:8080
3. 重新整理頁面
4. 關閉瀏覽器
5. 重開瀏覽器 重複步驟2
package main
import (
"fmt"
"time"
"github.com/kataras/iris"
"github.com/kataras/iris/mvc"
"github.com/kataras/iris/sessions"
)
//...
func main() {
app := newApp()
app.Run(iris.Addr(":8080"))
}
效果
go run build main.go
編譯執行,依前節流程測試訪問瀏覽器,形如下
訪問 13 次 當前session上線 32.7 秒內
本作品採用《CC 協議》,轉載必須註明作者和本文連結