template是go 语言web开发中必不可少的,特此记录下来:
【模板标签】
模板标签用"{{"和"}}"括起来
 
【注释】
{{/* 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标签,如将“<”转义为“&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 ...
来源:
http://www.admpub.com/blog/post-221.html
福利来啦,送你几个可爱的表情包,码代码之余,和小伙伴们斗图一下吧!!!啦啦啦................

golang模板语法简明教程(后面有福利哦)的更多相关文章

  1. golang模板语法简明教程

    [模板标签] 模板标签用"{{"和"}}"括起来   [注释] {{/* a comment */}} 使用“{{/*”和“*/}}”来包含注释内容   [变量 ...

  2. golang "text/template" 模板语法简明教程

    转自:https://www.cnblogs.com/Pynix/p/4154630.html [模板标签] 模板标签用"{{"和"}}"括起来   [注释] ...

  3. golang 模板语法使不解析html标签及特殊字符

    场景 有时候需要使用go的模板语法,比如说用go 去渲染html页面的时候,再比如说用go的模板搞代码生成的时候.这时候可能会遇到一个麻烦,不想转译的特殊字符被转译了. 我遇到的情况是写代码生成器的时 ...

  4. 人工智能+Python:十大Markdown语法简明教程

    Markdown 是一种轻量级的标记语言,用户可以使用诸如 * # 等简单的标记符号以最小的输入代价生成极富表现力的文档,目前也被越来越多的写作爱好者,撰稿者广泛使用.本文希望用直观的方法来讲述Mar ...

  5. golang模板语法

    https://www.cnblogs.com/Pynix/p/4154630.html https://blog.csdn.net/huwh_/article/details/77140664 ht ...

  6. angular2系列教程(二)模板语法

    今天我们要讲的是angualr2的模板语法,官网写的很清楚,但我也用通俗易懂的讲法再罗列一下吧! 例子

  7. golang 模板(template)的常用基本语法

    1. 模板 在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染. 这篇文章不讨论gola ...

  8. .net 开源模板引擎jntemplate 教程:基础篇之语法

    一.基本概念 上一篇我们简单的介绍了jntemplate并写了一个hello world(如果没有看过的,点击查看),本文将继续介绍jntemplate的模板语法. 我们在讲解语法前,首先要了解一下标 ...

  9. Django笔记&教程 3-2 模板语法介绍

    Django 自学笔记兼学习教程第3章第2节--模板语法介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/templates/# ...

随机推荐

  1. Angularjs学习笔记8_directive2

    指令难点在于参数 angular.module('app', []) .directive('myDirective', function() { return { restrict: String, ...

  2. 转载-好用的linux软件合集

    音频 Airtime – Airtime 是一款用于调度和远程站点管理的开放广播软件  Ardour – 在 Linux 上录音,编辑,和混音  Audacious – 开源音频播放器,按你想要的方式 ...

  3. MySQL和hive对比表结构脚本

    #!/bin/bash source /etc/profile runlog='/tmp/zewei/check_schema_log' hive_database_schema=/tmp/hive_ ...

  4. Windows Service的转换与部署

    开发Windows Service,可能会碰到以下两种情况. 1. 直接开发一个Windows Service 网上有很多教程,可以参考这个: http://www.cnblogs.com/sorex ...

  5. Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)(转载)

    win7(win10也适用)系统安装GPU/CPU版tensorflow Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程) 目录 2.配置 ...

  6. 2017-5-14 湘潭市赛 Partial Sum 给n个数,每次操作选择一个L,一个R,表示区间左右端点,该操作产生的贡献为[L+1,R]的和的绝对值-C。 0<=L<R<=n; 如果选过L,R这两个位置,那么以后选择的L,R都不可以再选择这两个位置。最多操作m次,求可以获得的 最大贡献和。

    Partial Sum Accepted : Submit : Time Limit : MS Memory Limit : KB Partial Sum Bobo has a integer seq ...

  7. 关于搭建HTTPS服务器服务

    关于 HTTPS 的基本原理大家都已经不再陌生,今天和大家说说如何搭建一个支持 HTTPS 的服务端. 服务端的 HTTPS HTTPS 已经几乎成为了当前互联网推荐的通信方式,它能最大化保证信息传输 ...

  8. spark 1.3 发布了

    悄悄地,spark 还是像往常一样,发布了1.3版本,从release notes可以看出,这一版本比较大的变化是1. 增加了DataFrame API,这样以后操作一些结构化的数据集时将会变的非常方 ...

  9. Tomcat运行流程

    Connector介绍 1.1 Connector的种类 Tomcat源码中与connector相关的类位于org.apache.coyote包中,Connector分为以下几类: Http Conn ...

  10. Swift学习笔记(一):No such module 'Cocoa'

    在xcode中创建一个Playground文件, 进行导包操作 ,import Cocoa 却提示No such module 'Cocoa' 原因是该Playground文件的platform 设置 ...