最詳細的Golang Template 模板語法說明


Go提供了template 庫專門用於渲染模板輸出,語法如下:

查看全文: http://www.golang.ren/article/7136

模板標簽

模板標簽用”{{“和”}}“括起來

可以通過.Delims 方法更改標簽界定符號,以避免和前端框架沖突,

   t, _ := template.New("").Delims("[[", "]]").ParseFiles("v/main.vue")

注釋

{{/* a comment */}}

使用“{{/”和“/}}”來包含注釋內容

變量

{{.}}

此標簽輸出當前對象的值

{{.Admpub}}

表示輸出Struct對象中字段或方法名稱為“Admpub”的值。

當“Admpub”是匿名字段時,可以訪問其內部字段或方法,比如“Com”:{{.Admpub.Com}} ,

如果“Com”是一個方法並返回一個Struct對象,同樣也可以訪問其字段或方法:{{.Admpub.Com.Field1}}

{{.Method1 “參數值1” “參數值2”}}

調用方法“Method1”,將后面的參數值依次傳遞給此方法,並輸出其返回值。

{{$admpub}}

此標簽用於輸出在模板中定義的名稱為“admpub”的變量。當$admpub本身是一個Struct對象時,可訪問其字段:{{$admpub.Field1}}

在模板中定義變量:變量名稱用字母和數字組成,並帶上“$”前綴,采用符號“:=”進行賦值。

比如:{{$x := “OK”}} 或 {{$x := pipeline}}

管道函數

用法1:

{{FuncName1}}

此標簽將調用名稱為“FuncName1”的模板函數(等同於執行“FuncName1()”,不傳遞任何參數)並輸出其返回值。

用法2:

{{FuncName1 “參數值1” “參數值2”}}

此標簽將調用“FuncName1(“參數值1”, “參數值2”)”,並輸出其返回值

用法3:

{{.Admpub|FuncName1}}

此標簽將調用名稱為“FuncName1”的模板函數(等同於執行“FuncName1(this.Admpub)”,將豎線“|”左邊的“.Admpub”變量值作為函數參數傳送)並輸出其返回值。

條件判斷

用法1:

{{if pipeline}} T1 {{end}}

標簽結構:{{if …}} … {{end}}

用法2:

{{if pipeline}} T1 {{else}} T0 {{end}}

標簽結構:{{if …}} … {{else}} … {{end}}

用法3:

{{if pipeline}} T1 {{else if pipeline}} T0 {{end}}

標簽結構:{{if …}} … {{else if …}} … {{end}}

其中if后面可以是一個條件表達式(包括管道函數表達式。pipeline即管道),也可以是一個字符竄變量或布爾值變量。當為字符竄變量時,如為空字符串則判斷為false,否則判斷為true。

遍歷循環

用法1:

{{range $k, $v := .Var}} {{$k}} => {{$v}} {{end}}

range…end結構內部如要使用外部的變量,比如.Var2,需要這樣寫:$.Var2

(即:在外部變量名稱前加符號“$”即可,單獨的“$”意義等同於global)

用法2:

{{range .Var}} {{.}} {{end}}

用法3:

{{range pipeline}} T1 {{else}} T0 {{end}}

當沒有可遍歷的值時,將執行else部分。

嵌入子模板

用法1:

{{template “name”}}

嵌入名稱為“name”的子模板。使用前,請確保已經用“{{define “name”}}子模板內容{{end}}”定義好了子模板內容。

用法2:

{{template “name” pipeline}}

將管道的值賦給子模板中的“.”(即“{{.}}”)

子模板嵌套

{{define “T1”}}ONE{{end}}

{{define “T2”}}TWO{{end}}

{{define “T3”}}{{template “T1”}} {{template “T2”}}{{end}}

{{template “T3”}}

輸出:

ONE TWO

定義局部變量

用法1:

{{with pipeline}} T1 {{end}}

管道的值將賦給該標簽內部的“.”。(注:這里的“內部”一詞是指被{{with pipeline}}…{{end}}包圍起來的部分,即T1所在位置)

用法2:

{{with pipeline}} T1 {{else}} T0 {{end}}

如果管道的值為空,“.”不受影響並且執行T0,否則,將管道的值賦給“.”並且執行T1。

說明:{{end}}標簽是if、with、range的結束標簽。

例子:輸出字符

{{“\“output\”“}}

輸出一個字符竄常量。

{{"output"}}

輸出一個原始字符串常量

{{printf “%q” “output”}}

函數調用.(等同於:printf(“%q”, “output”)。)

{{“output” | printf “%q”}}

豎線“|”左邊的結果作為函數最后一個參數。(等同於:printf(“%q”, “output”)。)

{{printf “%q” (print “out” “put”)}}

圓括號中表達式的整體結果作為printf函數的參數。(等同於:printf(“%q”, print(“out”, “put”))。)

{{“put” | printf “%s%s” “out” | printf “%q”}}

一個更復雜的調用。(等同於:printf(“%q”, printf(“%s%s”, “out”, “put”))。)

{{“output” | printf “%s” | printf “%q”}}

等同於:printf(“%q”, printf(“%s”, “output”))。

{{with “output”}}{{printf “%q” .}}{{end}}

一個使用點號“.”的with操作。(等同於:printf(“%q”, “output”)。)

{{with $x := “output” | printf “%q”}}{{$x}}{{end}}

with結構,定義變量,值為執行管道函數之后的結果(等同於:$x := printf(“%q”, “output”)。)

{{with $x := “output”}}{{printf “%q” $x}}{{end}}

with結構中,在其它動作中使用定義的變量

{{with $x := “output”}}{{$x | printf “%q”}}{{end}}

同上,但使用了管道。(等同於:printf(“%q”, “output”)。)

自定義函數

模板渲染時會在兩個地方查找函數:

  • 自定義的函數 map
  • 全局函數 map,這些函數是模板內置的

自定義函數使用 func (t *Template) Funcs(funcMap FuncMap) *Template 注冊。

全局函數

and

{{and x y}}

表示:if x then y else x

如果x為真,返回y,否則返回x。等同於Golang中的:x && y

call

{{call .X.Y 1 2}}

表示:dot.X.Y(1, 2)

call后面的第一個參數的結果必須是一個函數(即這是一個函數類型的值),其余參數作為該函數的參數。

該函數必須返回一個或兩個結果值,其中第二個結果值是error類型。

如果傳遞的參數與函數定義的不匹配或返回的error值不為nil,則停止執行。

html

轉義文本中的html標簽,如將“<”轉義為“<”,“>”轉義為“>”等

index

{{index x 1 2 3}}

返回index后面的第一個參數的某個索引對應的元素值,其余的參數為索引值

表示:x[1][2][3]

x必須是一個map、slice或數組

js

返回用JavaScript的escape處理后的文本

len

返回參數的長度值(int類型)

not

返回單一參數的布爾否定值。

or

{{or x y}}

表示:if x then x else y。等同於Golang中的:x || y

如果x為真返回x,否則返回y。

print

fmt.Sprint的別名

printf

fmt.Sprintf的別名

println

fmt.Sprintln的別名

urlquery

返回適合在URL查詢中嵌入到形參中的文本轉義值。(類似於PHP的urlencode)

布爾函數

布爾函數對於任何零值返回false,非零值返回true。

這里定義了一組二進制比較操作符函數:

eq

返回表達式“arg1 == arg2”的布爾值

對於簡單的多路相等測試,eq只接受兩個參數進行比較,后面其它的參數將分別依次與第一個參數進行比較,

{{eq arg1 arg2 arg3 arg4}}

即只能作如下比較:

arg1==arg2 || arg1==arg3 || arg1==arg4 …

ne

返回表達式“arg1 != arg2”的布爾值

lt

返回表達式“arg1 < arg2”的布爾值

le

返回表達式“arg1 <= arg2”的布爾值

gt

返回表達式“arg1 > arg2”的布爾值

ge

返回表達式“arg1 >= arg2”的布爾值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM