以下样例部分来自learnku.com实战课程

模板文件里的内容

<!DOCTYPE html>
<html lang="en">
<head>
    <title>创建文章 —— 咪啪咪啪</title>
    <style type="text/css">.error {color: red;}</style>
</head>
<body>
    <form action="{{ .URL }}" method="post">
        <p><input type="text" name="title" value="{{ .Title }}"></p>
        {{ with .Errors.title }}
        <p class="error">{{ . }}</p>
        {{ end }}
        <p><textarea name="body" cols="30" rows="10">{{ .Body }}</textarea></p>
        {{ with .Errors.body }}
        <p class="error">{{ . }}</p>
        {{ end }}
        <p><button type="submit">提交</button></p>
    </form>
</body>
</html>

传入模板的示例数据为

type ArticlesFormData struct {
    Title, Body string
    URL *url.URL
    Errors map[string]string
}

{{ . }} 语句

<form action="{{ .URL }}" method="post">

上面这句话是模板body里面第一句

{{ . }}.map.

紧接着看下面这段语句

{{ with .Errors.title }}
    <p class="error">{{ . }}</p>
{{ end }}

with 关键字

语法如下

...
with{{ . }}with{{ with .Errors.title }}{{ . }}.Errors.title

举个例子:
比如我们传入的数据为:

    data := ArticlesFormData{
            Title: "a",
            Body: "b",
            URL: storeURL,
            Errors: map[string]string{
                body: "内容长度需大于或等于10个字节",
                title: "标题长度需介于3-40",
            },
        }

则上面模板解析之后会输出为

标题长度需介于3-40

.Errors.title..Errors.title

pipeline

pipeline||

注意:并不是只有使用了 | 才是 pipeline。Go 的模板中,pipeline 的概念是传递数据,只要能产生数据的,都是 pipeline。