詳解golang中模板的常用語法
1、變量賦值
Action里可以初始化一個(gè)變量來捕獲管道的執(zhí)行結(jié)果。初始化語法如下:
其中$variable是變量的名字。聲明變量的action不會(huì)產(chǎn)生任何輸出。
{{$variable := pipeline}}
2、range
循環(huán)切片數(shù)組等
如果"range" action初始化了1個(gè)變量,該變量設(shè)置為迭代器的每一個(gè)成員元素,如果初始化了逗號(hào)分隔的2個(gè)變量:
這時(shí),key和val分別設(shè)置為數(shù)組/切片的索引或者字典的鍵,以及對(duì)應(yīng)的成員元素。注意這和go range從句只有一個(gè)參數(shù)時(shí)設(shè)置為索引/鍵不同!
// 這里的val是每一個(gè)元素,不是索引 {{range $val := .data}} {{end}} {{range $key,$val := .data}} {{end}}
一個(gè)變量的作用域只到聲明它的控制結(jié)構(gòu)(“if”、“with”、“range”)的"end"為止,如果不是在控制結(jié)構(gòu)里聲明會(huì)直到模板結(jié)束為止。子模板的調(diào)用不會(huì)從調(diào)用它的位置(作用域)繼承變量。
模板開始執(zhí)行時(shí),$會(huì)設(shè)置為傳遞給Execute方法的參數(shù),就是說,dot的初始值。
3、輸出原始字符串
下面是一些單行模板,展示了pipeline和變量。所有都生成加引號(hào)的單詞"output":
{{"\"output\""}} // 字符串常量 {{`"output"`}} // 原始字符串常量 {{printf "%q" "output"}} // 函數(shù)調(diào)用 {{"output" | printf "%q"}} // 函數(shù)調(diào)用,最后一個(gè)參數(shù)來自前一個(gè)command的返回值 {{printf "%q" (print "out" "put")}} // 加括號(hào)的參數(shù) {{"put" | printf "%s%s" "out" | printf "%q"}} // 玩出花的管道的鏈?zhǔn)秸{(diào)用 {{"output" | printf "%s" | printf "%q"}} // 管道的鏈?zhǔn)秸{(diào)用 {{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}} // 將變量使用在另一個(gè)action的with action {{with $x := "output"}}{{$x | printf "%q"}}{{end}} // 以管道形式將變量使用在另一個(gè)action的with action
4、模板自定義方法添加
自定義方法添加一定要在ParseFiles解析之前,因?yàn)榻馕龅臅r(shí)候同時(shí)會(huì)校驗(yàn)?zāi)0逦募锏姆椒ê驼Z法
初始化有多種方法:
1、初始化空模板
如果初始化的是空模板的話,最后在執(zhí)行的時(shí)候必須調(diào)用ExecuteTemplate方法,同時(shí)指定解析的模板名稱(只要模板名稱即可)
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í)行的時(shí)候可以調(diào)用ExecuteTemplate方法,同時(shí)指定解析的模板名稱(只要模板名稱即可)或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里面的模板名稱需要是最父級(jí)的模板文件,如下的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)
到此這篇關(guān)于詳解golang中模板的常用語法的文章就介紹到這了,更多相關(guān)golang模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go-micro集成RabbitMQ實(shí)戰(zhàn)和原理詳解
本文主要介紹go-micro使用RabbitMQ收發(fā)數(shù)據(jù)的方法和原理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Go關(guān)鍵字defer的使用和底層實(shí)現(xiàn)
defer是Go語言的關(guān)鍵字,一般用于資源的釋放和異常的捕捉,defer語句后將其后面跟隨的語句進(jìn)行延遲處理,就是說在函數(shù)執(zhí)行完畢后再執(zhí)行調(diào)用,也就是return的ret指令之前,本文給大家介紹了Go關(guān)鍵字defer的使用和底層實(shí)現(xiàn),需要的朋友可以參考下2023-11-11Go語言實(shí)現(xiàn)一個(gè)簡單生產(chǎn)者消費(fèi)者模型
本文主要介紹了Go語言實(shí)現(xiàn)一個(gè)簡單生產(chǎn)者消費(fèi)者模型,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式
這篇文章主要介紹了Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Golang執(zhí)行g(shù)o get私有庫提示"410 Gone" 的問題及解決辦法
這篇文章主要介紹了Golang執(zhí)行g(shù)o get私有庫提示”410 Gone“ 解決辦法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Go語言實(shí)現(xiàn)操作MySQL的基礎(chǔ)知識(shí)總結(jié)
這篇文章主要總結(jié)一下怎么使用Go語言操作MySql數(shù)據(jù)庫,文中的示例代碼講解詳細(xì),需要的朋友可以參考以下內(nèi)容,希望對(duì)大家有所幫助2022-09-09