GO语言中的html template包浅析


GO语言中的html/template包浅析

html/template包负责解析html文件中的模版块

html中的模版块儿通常由{{}}包含起来

笔者最近在收集模版语法

  • {{/注释/}}

  • {{.[字段名]}}

  • {{.[方法名] <参数1> <参数2> …}}

  • {{[函数映射的名字]}}

  • {{$变量名}}:用于输出在模版中定义的变量名

    • {{$x}}
    • {{$x := “OK”}}
    • {{$x := pipeline}}
  • {{if condition}}…{{end}}

  • {{if condition}}…{{else}}…{{end}}

  • {{if condition}}…{{else if condition}}…{{end}}

    • 逻辑判断

    • not 非

{{if not .condition}}
{{end}}

* and 与

{{if and .condition1 .condition2}}
{{end}}

* or 或

{{if or .condition1 .condition2}}
{{end}}

* eq 等于

{{if eq .var1 .var2}}
{{end}}

* ne 不等于

{{if ne .var1 .var2}}
{{end}}

* lt 小于

{{if lt .var1 .var2}}
{{end}}

* le 小于等于

{{if le .var1 .var2}}
{{end}}

* gt 大于

{{if gt .var1 .var2}}
{{end}}

* ge 大于等于

{{if ge .var1 .var2}}
{{end}}

  • {{range i, v := .slice}}…..{{end}}

    • 这个代码块是循环代码块
  • {{range .slice}}……{{end}}

    • 这是另一种写法,需要访问value的时候使用 . 来访问,但无法访问到index
  • {{templates “template name”}}

    • 嵌套其他模版
  • {{define “template name”}}….{{end}}

    • 定义一个模版
  • {{templates “template name” .}}

    • 获取另一个模版的变量

在模版中使用函数

在模版中使用函数需要从go程序中注入才能使用,在搜索引擎上挣扎了很久才解决这个问题.因为ParseFiles要在Funcs之后,所以创建模版的时候使用templates.New,模版名字要写成模版文件名全名,包括后缀名

package main

import (
    "net/http"
    "fmt"
    "html/template"
    "strconv"
    "log"
)

type Tmpldata struct{
    Title string
    Msg string
    Id string
}

func (t Tmpldata)GetTitle(x int) string{
    return t.Title + strconv.Itoa(x)
}

func SetTitle(title string,x int)string{
    return title + strconv.Itoa(x)
}

func index(w http.ResponseWriter,r *http.Request){
    files := []string{"templates/index.html"}

    funcs := template.FuncMap{"setTitle":SetTitle}
    tmp := template.Must(template.New("index.html").Funcs(funcs).ParseFiles(files...))

    var data = Tmpldata{Title:"吴文韬",Msg:"邱爽我爱你"}
    err := tmp.Execute(w,data)
    if err!=nil {
        log.Println(err)
    }
    //log.Printf("Excute ok")

}

func main(){
    http.HandleFunc("/",index)
    err  := http.ListenAndServe("0.0.0.0:10010",nil)
    if err!=nil{
        fmt.Print(err);
    }
    //fmt.Println("xxx")
}


<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
<title>
    {{setTitle .Title 1}}
</title>
</head>
<body>
<span>{{.Msg}}</span>
</body>
</html>

GO语言中的html template包浅析介绍到这里,更多go学习请参考编程字典go教程 和问答部分,谢谢大家对编程字典的支持。


原文链接:https://blog.csdn.net/lkysyzxz/article/details/79149427