詳解golang中模板的常用語法
1、變量賦值
Action里可以初始化一個變量來捕獲管道的執(zhí)行結果。初始化語法如下:
其中$variable是變量的名字。聲明變量的action不會產生任何輸出。
{{$variable := pipeline}}
2、range
循環(huán)切片數組等
如果"range" action初始化了1個變量,該變量設置為迭代器的每一個成員元素,如果初始化了逗號分隔的2個變量:
這時,key和val分別設置為數組/切片的索引或者字典的鍵,以及對應的成員元素。注意這和go range從句只有一個參數時設置為索引/鍵不同!
// 這里的val是每一個元素,不是索引 {{range $val := .data}} {{end}} {{range $key,$val := .data}} {{end}}
一個變量的作用域只到聲明它的控制結構(“if”、“with”、“range”)的"end"為止,如果不是在控制結構里聲明會直到模板結束為止。子模板的調用不會從調用它的位置(作用域)繼承變量。
模板開始執(zhí)行時,$會設置為傳遞給Execute方法的參數,就是說,dot的初始值。
3、輸出原始字符串
下面是一些單行模板,展示了pipeline和變量。所有都生成加引號的單詞"output":
{{"\"output\""}} // 字符串常量 {{`"output"`}} // 原始字符串常量 {{printf "%q" "output"}} // 函數調用 {{"output" | printf "%q"}} // 函數調用,最后一個參數來自前一個command的返回值 {{printf "%q" (print "out" "put")}} // 加括號的參數 {{"put" | printf "%s%s" "out" | printf "%q"}} // 玩出花的管道的鏈式調用 {{"output" | printf "%s" | printf "%q"}} // 管道的鏈式調用 {{with "output"}}{{printf "%q" .}}{{end}} // 使用dot的with action {{with $x := "output" | printf "%q"}}{{$x}}{{end}} //創(chuàng)建并使用變量的with action {{with $x := "output"}}{{printf "%q" $x}}{{end}} // 將變量使用在另一個action的with action {{with $x := "output"}}{{$x | printf "%q"}}{{end}} // 以管道形式將變量使用在另一個action的with action
4、模板自定義方法添加
自定義方法添加一定要在ParseFiles解析之前,因為解析的時候同時會校驗模板文件里的方法和語法
初始化有多種方法:
1、初始化空模板
如果初始化的是空模板的話,最后在執(zhí)行的時候必須調用ExecuteTemplate方法,同時指定解析的模板名稱(只要模板名稱即可)
t := template.New("") t = t.Funcs(template.FuncMap{"formatStr": formatStr}) t, err = t.ParseFiles("view/demo.html") err = t.ExecuteTemplate(w, "demo.html", p)
2、初始化解析模板
如果初始化的是解析模板的話,最后在執(zhí)行的時候可以調用ExecuteTemplate方法,同時指定解析的模板名稱(只要模板名稱即可)或Execute方法都行
t := template.New("demo.html") t = t.Funcs(template.FuncMap{"formatStr": formatStr}) t, err = t.ParseFiles("view/demo.html") //err = t.ExecuteTemplate(w, "demo.html", p) // 或 err = t.Execute(w, p)
3、嵌套模板自定義方法
一般情況頁面都指多模板嵌套顯示:所以這種情況下New和ExecuteTemplate里面的模板名稱需要是最父級的模板文件,如下的layout.html
t := template.New("layout.html") t = t.Funcs(template.FuncMap{"formatStr": formatStr}) t, err = t.ParseFiles([]string{ "view/layout.html", "view/header.html", "view/demo.html", "view/footer.html", }...) //err = t.ExecuteTemplate(w, "layout.html", p) // 或 err = t.Execute(w, p)
到此這篇關于詳解golang中模板的常用語法的文章就介紹到這了,更多相關golang模板內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
go-micro集成RabbitMQ實戰(zhàn)和原理詳解
本文主要介紹go-micro使用RabbitMQ收發(fā)數據的方法和原理,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05Golang執(zhí)行go get私有庫提示"410 Gone" 的問題及解決辦法
這篇文章主要介紹了Golang執(zhí)行go get私有庫提示”410 Gone“ 解決辦法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02