* ### 模板標簽
go 統一使用了 { { 和 } } 作為左右標簽,可以修改為其他的符號
`beego.BConfig.WebConfig.TemplateLeft = "(("`
` beego.BConfig.WebConfig.TemplateRight = "))"`
但,我們不建議修改,因為系統推薦了的是最優方案。
* ## 基本語法
```
* #### 使用`.`來訪問當前位置的上下文
* #### 使用`$`來引用當前模板根級的上下文
* #### 使用 $. 引用模板中的根級上下文
```
*****
* ## 支持go語言的符號,這里只是符號的支持
```
* #### 字符串:{ { “zhiliao ” } }
* #### 原始字符串:{ { `\\zhiliao` } } 不會轉義
* #### 字節類型:{ { ' a' } } --\>97
* #### nil:{ { print nil } } { {nil } }只有nil會報錯:nil is not a command
```
* ## pipeline:可以是上下文的變量輸出,也可以是函數通過管道傳遞的返回值
```
* #### { } 是上下文的變量輸出,是個pipline
* #### { { "0000" | len } } 是函數通過管道傳遞的返回值,是個pipline
* #### pipeline 被認為是空的情況,當 pipeline 的值等于:
* #### false 或 0
* #### nil 的指針或 interface
* #### 長度為 0 的 array, slice, map, string
```
* ## if的使用
```
* ## if ... end
* ## if ... else ... end
```
* ## 嵌套使用
~~~
男的成年人準進:
?
{{if .A}}
? {{if .C }}
? ? ? 可以進
? {{else}}
? ? ? 女不能進
? {{end}}
{{else}}
? 未成年不能進
{{end}}
~~~
##
* ## range:對應的內部長度為0時,不會執行,也就是數據為空
* #### 使用 $. 引用模板中的根級上下文
~~~
結構體:
type student struct {
Name string
Age int
Gender string
}
賦值:
arr_struct := [3]student{ {Name:"hl",Age:18,Gender:"男"},{Name:"hallen",Age:19,Gender:"男"},{Name:"hallen1",Age:191,Gender:"男"} }
c.Data["arr_struct"] = arr_struct
c.Data["total"] = 100
?
前端獲取:先循環數組,在獲取結構體變量,注意是大寫
{{range $v := .arr_struct}}
{{$v.Name}}
{{$v.Age}}
{{$v.Gender}}
第二種:
{{ range .arr_struct }}
{{.Name }}
{{.Age}}
{{ $.total}} // 使用 $. 引用模板中的根級上下文
{{end}}
~~~
* #### range也支持else
~~~
{{range .total}}
{{else}}
? {{ 0 }} ? ? ? ? ? ? ? ? {{/* 當 .total 為空 或者 長度為 0 時會執行這里 */}}
{{end}}
~~~
* ## with:伴隨
#### 用于重定向 pipeline
```
{{.struct_data.Name}}
{{.struct_data.Age}}
{{.struct_data.Add}}
```
以上代碼中,如果數據多,每次都要寫.struct_data.太麻煩,所以我們要用with。實例如下
~~~
{{with .struct_data}}
? {{.Name}}
{{end}}
?
?
類似于:
{{.struct_data.Name}}
~~~
#### with也支持else
如果值存在就顯示值,不存在就顯示無
~~~
{{with .struct_data1}}
{{.Name}}
{{else}}
無
{{end}}
~~~
* ## template:對于模板的分模塊處理很有用處,引入另一個模板文件
#### { {template "模板名" pipeline} }
` { {template "bottom.html"} }`
#### 支持直接載入模板文件
* #### { {template "bottom.html" .} }
* 注意:** 如果引入的文件也需要獲取動態數據,那{ {template "bottom.html" .} }中必須使用.訪問當前位置的上下文**
* ## define:可以用來定義自模板,可用于模塊定義和模板嵌套
## 定義自己的模板
首先,在視圖文件中定義自己的代碼塊,取名為loop,如下:
~~~
{{define "loop"}}
<li>{{.Name}}</li>
{{end}}
~~~
其次在 template調用自定義的模板塊或代碼塊,**如果使用動態數據,得加 `"." ` 上下文**
` {{template "loop" .}}`
~~~
<ul>
{{range .Items}}
? ? {{template "loop" .}} ? ? ? ?
{{end}}
</ul>
~~~
## 注釋:允許多行文本注釋,不允許嵌套
~~~
{{/* comment content
support new line */}}
~~~
* ## 格式化輸出
* ## print:對應 fmt.Sprint
* ## printf:對應 fmt.Sprintf
* ## println:對應 fmt.Sprintln
*****
#### %c:字符型,可以把輸入的數字按照ASCII碼相應轉換為對應的字符
#### %d:一個十進制數值,基數為10
#### %f:以標準計數法表示的浮點數或者復數值
#### fmt.Printf("%.2f\\n",1.23321)
#### .%s:字符串。輸出字符串中的字符直至字符串中的空字符(字符串以'\\0'結尾,這個'\\0'即空字符)
#### %t:以true或者false輸出的布爾值
#### %T:查看類型
#### v%:自動匹配類型輸出,適用于大多數類型
*****
## fmt.Sprint和fmt.Print的區別:
#### Print有打印,Sprint沒有打印,但是可以返回結果
## 變量可以使用符號 | 在函數間傳遞
`{ {.Name | printf "%s"} }`
* ## 括號
` { {printf "nums is %s %d" (printf "%d %d" 1 2) 3} }`
* ## and:
* #### 會逐一判斷每個參數,將返回第一個為空的參數,否則就返回最后一個非空參數
* #### { {and .X .Y .Z} }
* #### 只要有一個為空,則整體為空,如果都不為空,則返回最后一個
* ## or:
* #### 會逐一判斷每個參數,將返回第一個非空的參數,否則就返回最后一個參數
* #### { {or .X .Y .Z} }
* #### 只要有一個不為空,則返回第一個不為空的,否則返回空
* ## call:可以調用函數,并傳入參數
若在前端生成一個函數
```
c.Data["myfunc_data"]=MyFunc //調用以下的自定義函數,不能加()。
Function MyFunc() string{
return "This is my Function"
}
```
在模板中這樣調用
```
{ {call .myfunc_data} }
```
* #### { {call .Field .Arg1 .Arg2} }
* #### 調用的函數需要返回 1 個值 或者 2 個值,返回兩個值時,第二個值用于返回 error 類型的錯誤。返回的錯誤不等于 nil 時,執行將終止。
* ## index:讀取指定類型對應下標的值
* ### 支持 map, slice, array, string
* 如果是map獲取指定數據中key的值;如果是字符串和數組是角標arr[0](0,1...)指定的值。
* 中文漢字用角標取值會顯示Asc值。
* ##### this.Data\["Maps"\] = map\[string\]string{"name": "Beego"}
* ##### { {index .Maps "name"} }
* ## len:返回對應類型的長度
* #### 支持類型:map, slice, array, string, chan
* #### { { .Content|len } }
* ## not:返回輸入參數的否定值,也就是取反。true -> false
* `{{not 1}}`值為false
* ## urlquery:
* #### 有些符號在URL中是不能直接傳遞的,如果要在URL中傳遞這些特殊符號,那么就要使用他們的編碼了。
* #### `urlquery "http://www.baidu.com"`
轉碼后返回:http%3A%2F%2F[www.baidu.com](www.baidu.com)
* #### %后面的就是字符的16近制的字符碼
* ## eq / ne / lt / le / gt / ge
* #### eq:等于
* #### ne:不等于
* #### lt:小于
* #### le:小于等于 區別于lte
* #### gt:大于
* #### ge:大于等于 區別于gte
* #### eq 和其他函數不一樣的地方是,支持多個參數,和下面的邏輯判斷相同
100是否小于200
```
* #### { {if eq true .Var1 .Var2 .Var3} }{ {end} }
* #### { {if lt 100 200} }{ {end} }
```
- go環境搭建
- 解決go get網絡慢的問題
- beego的安裝
- bee的安裝
- 編輯器
- go module
- 配置文件詳解
- 配置文件其他說明
- 路由方法
- 路由
- 數據校驗
- 校驗函數
- 頁面跳轉
- 獲取前端數據
- json文件的獲取
- xsrf的用法
- xsrf的防護
- srfs和json的搭配
- flash的用法
- 過濾器
- url反轉
- 各類數據的處理
- 模板函數
- 內置模板函數
- 自定義模板函數
- 模板
- 模板處理
- 模板渲染
- 視圖文件的處理
- 靜態文件
- 請求方式判斷
- 驗證碼
- 另一種方法
- 分頁類
- session
- 登錄判斷
- orm模塊
- 使用方法
- mysql的安裝
- 安裝orm及驅動
- 建立模型
- 自定義模型
- 增刪改查
- 高級查詢
- 常見問題匯總
- 代碼收藏
- 打包部署
- go build打包
- utils收藏
- 新goer容易犯的錯
- 字符串操作