這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
golang模板文法簡明教程
【模板標籤】模板標籤用"{{"和"}}"括起來 【注釋】{{/* 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")。) ===============【預定義的模板全域函數】================【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”的布爾值 【ne】返回運算式“arg1 != arg2”的布爾值 【lt】返回運算式“arg1 < arg2”的布爾值 【le】返回運算式“arg1 <= arg2”的布爾值 【gt】返回運算式“arg1 > arg2”的布爾值 【ge】返回運算式“arg1 >= arg2”的布爾值 對於簡單的多路相等測試,eq只接受兩個參數進行比較,後面其它的參數將分別依次與第一個參數進行比較,{{eq arg1 arg2 arg3 arg4}}即只能作如下比較:arg1==arg2 || arg1==arg3 || arg1==arg4 ... 來源:http://www.admpub.com/blog/post-221.html