前言 文本模板是大家平时经常用的 , 例如服务端渲染,代码生成工具. 在我看来模板就是程序. 模板引擎就是编程语言, 渲染模板就是运行程序. 本文主要梳理了模板引擎作为一种特殊的编程语言提供了哪些接口(语法)使得开发人员可以灵活的编写模板以实现自己的需求
一、模板语法

模板引擎作为一种简易的编程语言, 需要提供以下语法

  • 运行时输入
  • 变量定义/使用
  • 表达式
  • 循环
  • 判断
  • 封装
  • 注释

模板与编程语言的一大区别是代码和数据和在一起的,所以要提供接口(语法)区分代码的数据的

二、示例

代码如下(示例):

  • 模板标签
{{ }}
{{ . }}Sliceint64intstringfloat32float64StructMap{{.Field}}
package main

import (
	"fmt"
	"os"
	"text/template"
)

func main() {
	t, _ := template.New("tpl").Parse(`{{ . }}`)
	fmt.Println(t.Execute(os.Stdout, "hello world"))
	t, _ = template.New("tpl").Parse(`{{ .Name }}, {{.Age}}`)
	fmt.Println(t.Execute(os.Stdout, struct {
		Name string
		Age  int64
	}{"小明", 18}))
	// output
	// hello world<nil>
	// 小明, 18<nil>
}
  • 变量定义/使用
{{ $var := . }}{{ {{ $var}} }}
package main

import (
	"fmt"
	"os"
	"text/template"
)

func main() {
	t, _ := template.New("tpl").Parse(`{{ $var := . }} {{ $var}}`)
	fmt.Println(t.Execute(os.Stdout, "hello world"))
	// output
	// hello world<nil>
}
{{ function arg1 arg2 }}{{ . | function1 | function2}}
package main

import (
	"fmt"
	"math"
	"os"
	"text/template"
)

func main() {
	t, _ := template.New("tpl").Funcs(
		template.FuncMap{
			"Add": func(a, b int) int {
				return a + b
			},
			"Pow": func(a, b int) int {
				return int(math.Pow(float64(a), float64(b)))
			},
		}).Parse(`{{ Add 1 .  | Pow  3 }}`)
	fmt.Println(t.Execute(os.Stdout, 1))
	// output
	//9<nil>
}
{{range $k, $v := .Var}} {{$k}} => {{$v}} {{end}}
package main

import (
	"fmt"
	"os"
	"text/template"
)

func main() {
	t, _ := template.New("tpl").Parse(`{{range $k, $v := .}} {{$k}}:{{$v}} {{end}}`)
	fmt.Println(t.Execute(os.Stdout, map[string]interface{}{
		"Name": "小明",
		"Age":  18,
	}))
	// output
	// Age:18  Name:小明 <nil>
}

{{if ...}} ... {{end}}{{if ...}} ... {{else}} ... {{end}}{{if ...}} ... {{else if ...}} ... {{end}}
package main

import (
	"fmt"
	"os"
	"text/template"
)

func main() {
	t, _ := template.New("tpl").Parse(`{{if lt .Age  18  }} 未成年人禁止入内 {{end}}`)

	fmt.Println(t.Execute(os.Stdout, map[string]interface{}{
		"Name": "小明",
		"Age":  16,
	}))
	// output
	//  未成年人禁止入内 <nil>
}
  • 封装
    定义模板

  • 注释


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。