* ### 模板标签
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容易犯的错
- 字符串操作