迭代动作可以对数组、切片、映射或者通道进行迭代,而在迭代循环的内部,点.则会被设置为当前被迭代的元素,就像这样:

{{ range array }}
    Dot is set to the element {{ . }}
{{ end }}

代码清单5-5展示了一个使用迭代动作的例子。

代码清单5-5 迭代动作示例

<!DOCTYPE html>
<html>  
    <head>    
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    
        <title>Go Web Programming</title>
    </head>
    <body>
       <ul>
           {{ range . }}
               <li>{{ . }}</li>
           {{ end}}
       </ul>
    </body>
</html>

下面是负责调用这个模板的处理器:

func process(w http.ResponseWriter, r *http.Request) {    
    t, _ := template.ParseFiles("tmpl.html")    
    daysOfWeek := []string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}    
    t.Execute(w, daysOfWeek)
}

这段代码创建了一个切片,并在切片里面包含了周一到周日的英文缩写,然后将它传递给模板。接着,这个切片会被传递至语句{{ range . }}中的.里面,然后由range动作对这个切片中的各个元素进行迭代。

迭代循环中的{{ . }}代表的是当前被迭代的切片元素,图5-3展示了浏览器展示的迭代结果。

图5-3 使用迭代动作实现迭代

代码清单5-6展示了迭代动作的一个变种,这个变种允许用户在被迭代的数据结构为空时,显示一个备选的(fallback)结果。

代码清单5-6 带有备选结果的迭代动作

<html>  
    <head>    
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    
        <title>Go Web Programming</title>  
    </head>  

    <body>    
    <ul>    
    {{ range . }}      
        <li>{{ . }}</li>  
    {{ else }}      
        <li> Nothing to show </li>    
    {{ end}}    
    </ul>  
    </body>

</html>

模板里面介于{{ else }}{{ end }}之间的内容将在点.nil时显示。在这个例子中,被显示的将是文本“Nothing toshow”

results matching ""

    No results matching ""