起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > IT培训 > Go语言模板语法包含什么?老男孩GO语言

Go语言模板语法包含什么?老男孩GO语言

时间:2021-01-08 15:52:20来源:未知 作者:老男孩教育 已有: 名学员访问该课程

  快捷搜索:

前言:Go是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得更加容易,所以很多人都想要学习GO语言。那么你知道Go语言模板语法有哪些吗?我们来看看吧。 模板标签 模板标签用{{和}}括起来。 模板注释 {{/* a comment */}} 使用{{/和/}}来包含注释内容。 变量 {{.}} 表示所有 (此标签输出当前对象的值) 。

  Go是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得更加容易,所以很多人都想要学习GO语言。那么你知道Go语言模板语法有哪些吗?我们来看看吧。

  模板标签

  模板标签用"{{"和"}}"括起来。

  模板注释

  {{/* a comment */}}

  使用“{{/”和“/}}”来包含注释内容。

  变量

  {{.}}

  表示所有 (此标签输出当前对象的值) 。

  {{.Oldboy}}

  表示输出struct对象中字段或方法名称为“Oldboy”的值。

  当“Oldboy”是匿名字段时,可以访问其内部字段或方法,比如“Age”:{{.Oldboy.Age}} ,如果“Age”是一个方法并返回一个struct对象,同样也可以访问其字段或方法:{{.Oldboy.Age.Field1}} 。

  {{.Method "参数1" "参数2"}}

  调用方法“Method”,将后面的参数值依次传递给此方法,并输出其返回值。

  {{$oldboy}}

  此标签用于输出在模板中定义的名称为“oldboy”的变量。当$oldboy本身是一个struct对象时,可访问其字段:{{$oldboy.Field}} 。

  在模板中定义变量:变量名称用字母和数字组成,并带上“$”前缀,采用符号“:=”进行赋值。

  比如:{{$user := "oldboy"}} 或 {{$pwd := 123456}}

  函数

  用法1:

  {{FuncName}}

  此标签将调用名称为“FuncName”的模板函数(等同于执行“FuncName()”,不传递任何参数)并输出其返回值。

  用法2:

  {{FuncName "参数1" "参数2"}}

  此标签将调用“FuncName("参数1", "参数2")”,并输出其返回值。

  用法3:

  {{.Oldboy|FuncName}}

  此标签将调用名称为“FuncName”的模板函数(等同于执行“FuncName(Oldboy)”,将竖线“|”左边的“.Oldboy”变量值作为函数参数传送)并输出其返回值。

  条件判断

  用法1:

  {{if 布尔表达式 }} 在布尔表达式为 true 时执行 {{end}}

  标签结构:{{if …}} … {{end}} 。

  用法2:

  {{if 布尔表达式}} 在布尔表达式为 true 时执行 {{else}} 在布尔表达式为 false 时执行 {{end}}

  标签结构:{{if …}} … {{else}} … {{end}} 。

  用法3:

  {{if 布尔表达式1 }} 在布尔表达式1为 true 时执行 {{else if 布尔表达式2 }} 在布尔表达式2为 true 时执行 {{end}}

  标签结构:{{if …}} … {{else if …}} … {{end}} 。

  遍历

  用法1:

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

  range…end结构内部如要使用外部的变量,比如.Var2,需要这样写:$.Var2(即:在外部变量名称前加符号“$”即可,单独的“$”意义等同于global)。

  用法2:

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

  这种方式通过“.”来访问对应的value 。

  用法3:

  {{ range . }} 有可遍历的值时执行 {{else}} 无可遍历的值时执行 {{end}}

  当没有可遍历的值时,则会执行else分支的部分。

  嵌入子模板

  用法1:

  {{template "name"}}

  嵌入名称为“name”的子模板。使用前,请确保已经用“{{define "name"}}子模板内容{{end}}”定义好了子模板内容。

  用法2:

  {{template "name" arg }}

  将参数传给子模板,arg 赋给子模板中的“.”(即“{{.}}”)

  子模板嵌套

  {{define "T1"}}ONE{{end}}{{define "T2"}}TWO{{end}}{{define "T3"}}{{template "T1"}} {{template "T2"}}{{end}}{{template "T3"}}

  输出:

  ONE TWO

  定义局部变量

  用法1:

  {{with arg}} 标签内部 {{end}}

  arg 的值将赋给该标签内部的“.”。(注:这里的“内部”一词是指被{{with arg}}…{{end}}包围起来的部分)

  用法2:

  {{with arg}} 有值时执行 {{else}} 无值时执行 {{end}}

  如果arg的值为空,执行else分支的部分。

  说明:{{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结构中,在其它动作中使用定义的变量。

  同上,但使用了“ | ”。(等同于:printf("%q", "output")。)

  预定义的模板全局函数

  函数:and

  {{and .a .b .c}}

  and 会逐一判断每个参数,将返回第一个为空的参数,否则就返回最后一个非空参数。

  函数:or

  {{or .x .y .z}}

  or 会逐一判断每个参数,将返回第一个非空的参数,否则就返回最后一个参数。

  函数:call

  {{call .funcName .arg1 .arg2}}

  call 可以调用函数,并传入参数调用的函数需要返回 1 个值 或者 2 个值,返回两个值时,第二个值用于返回 error 类型的错误。返回的错误不等于 nil 时,执行将终止。

  函数:index

  {{index .values key1 key2 key3}}

  返回index后面的第一个参数的某个索引对应的元素值,其余的参数为索引值。支持 map, slice, array, string 。

  函数:len

  {{len "oldboy"}}

  返回对应类型的长度,支持类型:map, slice, array, string, chan 。

  函数:not

  {{not .arg}}

  not 返回输入参数的否定值,if true then false else true。

  函数:urlquery

  {{urlquery "https://www.oldboyedu.com/"}}

  返回适合在URL查询中嵌入到形参中的文本转义值。

  函数:print、printf、println

  分别是 fmt.Sprint、fmt.Sprintf、fmt.Sprintln的别名。

  布尔函数

  布尔函数对于任何零值返回false,非零值返回true。

  函数:eq

  {{eq .arg1 .arg2}}

  返回表达式“arg1 == arg2”的布尔值。

  函数:ne

  {{ne .arg1 .arg2}}

  返回表达式“arg1 != arg2”的布尔值。

  函数:lt

  {{lt .arg1 .arg2}}

  返回表达式“arg1 < arg2”的布尔值。

  函数:le

  {{le .arg1 .arg2}}

  返回表达式“arg1 <= arg2”的布尔值。

  函数:gt

  {{gt .arg1 .arg2}}

  返回表达式“arg1 > arg2”的布尔值。

  函数:ge

  {{ge .arg1 .arg2}}

  返回表达式“arg1 >= arg2”的布尔值。

  对于简单的多路相等测试,eq只接受两个参数进行比较,后面其它的参数将分别依次与第一个参数进行比较:

  {{eq arg1 arg2 arg3 arg4}}

  即只能作如下比较:

  arg1==arg2 || arg1==arg3 || arg1==arg4 ...

  布尔函数操作

  not 非

  {{if not .condition}} {{end}}

  and 与

  {{if and .condition1 .condition2}}{{end}}

  or 或

  {{if or .condition1 .condition2}}{{end}}

  eq 等于

  {{if eq .arg1 .arg2}}{{end}}

  ne 不等于

  {{if ne .arg1 .arg2}}{{end}}

  lt 小于

  {{if lt .arg1 .arg2}}{{end}}

  le 小于等于

  {{if le .arg1 .arg2}}{{end}}

  gt 大于

  {{if gt .arg1 .arg2}}{{end}}

  ge 大于等于

  {{if ge .arg1 .arg2}}{{end}}

  老男孩教育专注Linux云计算运维工程师、Python全栈+人工智能、Python自动化运维开发、网络安全、数据分析、新媒体运营、MySQLDBA开发、K8S微服务、Go语言等互联网课程培训。欢迎对it行业感兴趣的朋友们来公司考察及学习。

文章出自:http://www.epx365.cn/peixun/it/202168222.html

文章标题:Go语言模板语法包含什么?老男孩GO语言



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

(责任编辑:老男孩教育)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
培训学校
老男孩教育 访问该机构站点 报名留言 加为好友 用户等级:高级会员 用户级别:10 机构名称:老男孩教育 联 系 人:任女士 联系电话:18710030740 联系手机:18710030740 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件:768386696@qq.com 网站域名:https://www.oldboyedu.com/ 注册时间:2019-03-20 15:03 最后登录:2021-01-14 11:01