概述

最近又尝试了一下 Golang 的 Template,发现一般功能都满足了,而且语法也相对比较简单,所以稍作总结。在 Go语言中,模板有 text/templatehtml/template 两个,但是接口都是一致的,区别在于 html/template 用于生成 HTML 输出,会自动得转移 HTML 标签用于防范攻击。

简单的木板渲染

[[email protected]]# cat main.go
    t := template.Must(template.New("letter").Parse(letter))
    err := t.Execute(os.Stdout, struct)

模板规则

Go 语言中,模板的特殊表达式都是通过 {{ 和 }} 引起来的,没有引起来的一般都是直接翻译出来就好了,所以也没啥特别说的。在 Go 语言的模板里面,掌握几个概念基本上就可以使用了,分别是:

这基本上就是 Go 里面模板的主要功能了,后面就对这几个组件进行详述,看看分别是什么东西。

pipeline

pipeline 我觉得是 Go 语言的模板中差不多最复杂的一个东西了,其实 pipeline 可以理解成管道(如果你玩 Linux 的话),前面条命令的输出就是后面条命令的输入,而且 Go 语言的 pipeline 也支持变量取值,而且变量取值的本身就是 pipeline 中的一个环节。

除此之外,pipeline 中的函数还支持多个参数,2 个 3 个甚至多个参数都是支持的,除了管道前面的输出作为第一个参数之外,在函数后面接着的所有变量都是参数,依次排序。下面就是一个管道的示例:

.Name | toUpper | toEnglish

这里包含了 .Name 是一个变量,用于取值,然后 toUppertoEnglish 都是函数,除了使用 .Name 用于取值之外,还支持 .Method 用于调用函数,那么这里的取值和调用方法的对象主体是谁?这就是在渲染这个模板的时候传进来的对象,所有关于 . 的操作都以这个传递的对象为基准进行操作。

可使用表达式

定义模板

Block

渲染模板

常用变量

变量赋值

在模板中也可以对 pipeline 的值进行赋值,赋值的方式如下:

$variable := pipeline
range $index, $element := pipeline

模板函数

During execution functions are found in two function maps:

预定义的全局函数

预定义的布尔函数

注释

{{/* a comment */}}

特殊字符

Glob

从一个目录中加载一系列的模板

函数的使用

Reference

  1. How to Use Template Blocks in Go 1.6