gf框架之模板引擎 – 基本用法

NO IMAGE

文章來源:http://gf.johng.cn/591642

控制器檢視

gf為控制器提供了良好的模板引擎支援,由gmvc.View

使用示例1:

package main

import (
    "gitee.com/johng/gf/g/net/ghttp"
    "gitee.com/johng/gf/g/frame/gmvc"
)

type ControllerTemplate struct {
    gmvc.Controller
}

func (c *ControllerTemplate) Info() {
    c.View.Assign("name", "john")
    c.View.Assigns(map[string]interface{}{
        "age"   : 18,
        "score" : 100,
    })
    c.View.Display("index.tpl")
}

func main() {
    s := ghttp.GetServer()
    s.BindController("/template", &ControllerTemplate{})
    s.SetPort(8199)
    s.Run()
}

其中index.tpl

執行後,訪問http://127.0.0.1:8199/template/info

執行後,訪問http://127.0.0.1:8199/template/info

非控制器檢視

非控制器中使用模板引擎沒有控制器檢視的支援,可以使用底層的gview包來實現,可以通過單例管理器來獲取預設的單例gview物件。

gview包方法列表:

func Get(path string) *View
func New(path string) *View
func (view *View) BindFunc(name string, function interface{})
func (view *View) Parse(file string, params map[string]interface{}) ([]byte, error)
func (view *View) ParseContent(content string, params map[string]interface{}) ([]byte, error)

func (view *View) GetPath() string
func (view *View) SetPath(path string)

使用示例1:

package main

import (
    "gitee.com/johng/gf/g/net/ghttp"
    "gitee.com/johng/gf/g/frame/gins"
)

func main() {
    s := ghttp.GetServer()
    s.BindHandler("/template2", func(r *ghttp.Request){
        content, _ := gins.View().Parse("index.tpl", map[string]interface{}{
            "id"   : 123,
            "name" : "john",
        })
        r.Response.Write(content)
    })
    s.SetPort(8199)
    s.Run()
}

在這個示例中我們使用單例管理器獲取一個預設的檢視物件,隨後通過該檢視渲染對應模板目錄下的index.tpl

執行後,訪問http://127.0.0.1:8199/template2

通過命令列引數

./main --viewpath=/opt/template/

通過環境變數

啟動時修改環境變數:

gf.viewpath=/opt/config/; ./main

使用genv包來修改環境變數:

genv.Set("gf.viewpath", "/opt/template")

自動檢測更新

模板引擎使用了快取機制,當模板檔案第一次被讀取後會被快取到記憶體,下一次讀取時將會直接從快取中獲取,以提高執行效率。並且,模板引擎提供了對模板檔案的自動檢測更新機制,當模板檔案在外部被修改後,模板引擎能夠即時地監控到並重新整理模板檔案的快取內容。

模板引擎的自動檢測更新機制也是gf框架的一大特色。