基本介绍

    1. 简单、易用、强大;
    2. 支持多模板目录搜索;
    3. 支持模板设计;
    4. 支持模板视图对象单例模式;
    5. 与配置管理模块原生集成,使用方便;
    6. 底层采用了二级缓存设计,性能高效;
    7. 新增模板标签及大量的内置模板变量、模板函数;
    8. 支持模板文件修改后自动更新缓存机制,对开发过程更友好;
    9. define/template标签支持跨模板调用(同一模板路径包括子目录下的模板文件);
    10. include标签支持任意路径的模板文件引入;

    接口文档

    https://godoc.org/github.com/gogf/gf/os/gview

    简要说明:

    1. gview.Get用于根据给定的一个模板目录路径,获得对应的单例模板引擎对象;
    2. gview.New同样可以根据给定的模板目录路径创建模板引擎对象,但没有单例管理;
    3. SetPath/AddPath用于设置/添加当前模板引擎对象的模板目录路径,其中SetPath会覆盖所有的模板目录设置,推荐使用AddPath
    4. Assign/Assigns用于设置模板变量,通过该模板引擎解析的所有模板均可以使用这些模板变量;
    5. BindFunc用于绑定模板函数,具体使用方法参考后续示例程序;
    6. Parse/ParseContent用于解析模板文件/内容,可以在解析时给定临时的模板变量及模板函数;
    7. SetDelimiters用于设置该模板引擎对象的模板解析分隔符号,默认为{{ }}(与vuejs前端框架有冲突);
    1. import (
    2. "github.com/gogf/gf/frame/g"
    3. "github.com/gogf/gf/net/ghttp"
    4. )
    5. func main() {
    6. s := g.Server()
    7. s.BindHandler("/template", func(r *ghttp.Request){
    8. r.Response.WriteTplContent(tplContent, g.Map{
    9. "id" : 123,
    10. "name" : "john",
    11. })
    12. })
    13. s.SetPort(8199)
    14. s.Run()
    15. }

    在项目中我们经常会遇到Golang默认模板变量分隔符号与Vue的变量分隔符号冲突的情况(都使用的是{{ }}),我们可以使用SetDelimiters方法来自定义全局的Golang模板变量分隔符号:

    1. // main.go
    2. package main
    3. import (
    4. "fmt"
    5. "github.com/gogf/gf/frame/g"
    6. )
    7. func main() {
    8. v := g.View()
    9. v.SetDelimiters("${", "}")
    10. b, err := v.Parse("gview_delimiters.tpl", map[string]interface{} {
    11. "k" : "v",
    12. })
    13. fmt.Println(err)
    14. fmt.Println(string(b))

    执行后,输出结果为:

    1. <nil>
    2. test.tpl content, vars: map[k:v]

    gf框架的模板引擎支持非常灵活的多目录自动搜索功能,通过SetPath可以修改模板目录为唯一的一个目录地址,同时,我们可以通过AddPath方法添加多个搜索目录,模板引擎底层将会按照添加目录的顺序作为优先级进行自动检索。直到检索到一个匹配的文件路径为止,如果在所有搜索目录下查找不到模板文件,那么会返回失败。

    gview视图对象初始化时,默认会自动添加以下模板文件搜索目录:

    1. 当前工作目录及其下的template目录:例如当前的工作目录为/home/www时,将会添加/home/www/home/www/template
    2. 当前可执行文件所在目录及其下的template目录:例如二进制文件所在目录为/tmp时,将会添加/tmp/tmp/template
    3. 当前main源代码包所在目录及其下的template目录(仅对源码开发环境有效):例如main包所在目录为/home/john/workspace/gf-app时,将会添加/home/john/workspace/gf-app/home/john/workspace/gf-app/template

    我们可以通过以下方式修改视图对象的模板文件搜索目录,视图对象将会只在该指定目录执行配置文件检索:

    1. (推荐)单例模式获取全局View对象,通过SetPath方法手动修改;
    2. 修改命令行启动参数 - gf.gview.path
    3. 修改指定的环境变量 - GF_GVIEW_PATH

    例如,我们的执行程序文件为main,那么可以通过以下方式修改模板引擎的模板目录(Linux下):

    1. (推荐)通过单例模式
      1. g.View().SetPath("/opt/template")
    2. 通过命令行参数
    3. 通过环境变量
      • 启动时修改环境变量:
        1. GF_GVIEW_PATH=/opt/config/; ./main
      • 使用genv模块来修改环境变量:
        1. genv.Set("GF_GVIEW_PATH", "/opt/template")

    模板引擎的自动检测更新机制是框架特有的一大特色。