条件动作会根据参数的值来决定对多条语句中的哪一条语句进行求值。最简单的条件动作的格式如下:
{{ if arg }}
some content
{{ end }}
这个动作的另一种格式如下:
{{ if arg }}
some content
{{ else }}
other content
{{ end }}
以上两种格式中的arg
都是传递给条件动作的参数。本章稍后会对动作的参数做更详细的介绍,目前来说,我们可以把参数看作是一个值,这个值可以是一个字符串常量、一个变量、一个返回单个值的函数或者方法,诸如此类。现在,让我们来看一下如何在模板中使用这个条件动作。如代码清单5-3所示,我们会在服务器上面创建一个处理器,这个处理器会随机地生成介于0至10之间的随机整数,然后通过判断这个随机整数是否大于5来创建出一个布尔值,并在最后将这个布尔值传递给模板。
代码清单5-3 在处理器里面生成一个随机数
package main
import (
"net/http"
"html/template"
"math/rand"
"time"
)
func process(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("tmpl.html")
rand.Seed(time.Now().Unix())
t.Execute(w, rand.Intn(10) > 5)
}
func main() {
server := http.Server{
Addr: "127.0.0.1:8080",
}
http.HandleFunc("/process", process)
server.ListenAndServe()
}
在此之后,我们需要在模板文件tmpl.html
里面对传入的参数进行测试,并根据测试的结果,在页面上显示“Number isgreater than 5!”
和“Number is 5 or less! ”
这两条消息中的一条,具体的做法如代码清单5-4所示。(正如之前所说,动作.代表的是处理器传递给模板的数据,在这个例子中,.代表的是被传入的布尔值。)
代码清单5-4 使用了条件动作的模板文件tmpl.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Go Web Programming</title>
</head>
<body>
{{ if . }}
Number is greater than 5!
{{ else }}
Number is 5 or less!
{{ end }}
</body>
</html>