golang模板語法簡明教程

【模板標籤】html

模板標籤用"{{"和"}}"括起來數組

 

【註釋】函數

{{/* a comment */}}測試

使用「{{/*」和「*/}}」來包含註釋內容this

 

【變量】url

{{.}}spa

此標籤輸出當前對象的值code

{{.Admpub}}htm

表示輸出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標籤,如將「<」轉義爲「&lt;」,「>」轉義爲「&gt;」等

 

【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 ...

相關文章
相關標籤/搜索