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框架的一大特色。