package main;

import (
"html/template"
"os"
"fmt"
) type Person struct {
Id string;
UserName string;
Age int;
Contact map[string]string;
} func (p Person) Say(msg string) string {
return msg;
} func test1() string {
return "test1";
} func test2(msg string) string {
return msg + "test2";
} func test3(a int) bool {
if a == 3 {
return true;
}
return false;
} func sum() func(nums ...int) (int, error) {
return func(nums ...int) (int, error) {
sum := 0;
for _, v := range nums {
sum += v;
}
return sum, nil;
};
} func main() {
//创建一个模板
t := template.New("test");
//注释
t, _ = t.Parse(`{{/*我是注释*/}}`);
t.Execute(os.Stdout, nil); //输出单个字符串
t2 := template.New("test");
// {{.}}输出当前对象的值
t2, _ = t2.Parse(`{{.}}`);
p := "test";
//输出字符串
t2.Execute(os.Stdout, p);
fmt.Println(); //输出结构中字段的值
t3 := template.New("test");
// {{.字段名}}输出对象中字段的值
//注意字段是可导出的,首字母大写
t3, _ = t3.Parse(`{{.Id}} {{.UserName}} {{.Age}}`);
t3.Execute(os.Stdout, Person{"001", "test", 11, nil});
fmt.Println(); //调用结构的方法
t4 := template.New("test");
// {{.方法 参数1 参数2}}
//参数依次传入方法,输出返回值
t4, _ = t4.Parse(`{{.Say "hello"}}`);
t4.Execute(os.Stdout, Person{"002", "test2", 22, nil});
fmt.Println(); //模板中定义变量
t5 := template.New("test");
// {{$变量名}} 输出模板中定义的变量
t5, _ = t5.Parse(`{{$a := "模板中定义的变量"}} {{$a}}`);
t5.Execute(os.Stdout, nil);
fmt.Println(); //模板函数
t6 := template.New("test");
//注册模板函数
t6.Funcs(template.FuncMap{"test1": test1});
t6.Funcs(template.FuncMap{"test2": test2});
// {{函数名}}输出函数返回值
// {{函数名 参数1 参数2}}
// {{.字段名|函数名}} 以字段的值作为函数的参数
t6, _ = t6.Parse(`
{{test1}}
{{test2 "参数"}}
{{.UserName|test2}}
`);
t6.Execute(os.Stdout, Person{"003", "test3", 33, nil});
fmt.Println(); //条件判断
t7 := template.New("test");
t7.Funcs(template.FuncMap{"test3": test3});
// {{if 表达式}}{{else if}}{{else}}{{end}}
// if后面可以是一个条件表达式,可以是字符串或布尔值变量
// 注意if后面不能直接使用==来判断
t7, _ = t7.Parse(`
{{if 1}}
为真
{{else}}
为假
{{end}} {{$a := 4}}
{{if $a|test3}}
$a=3
{{else}}
$a!=3
{{end}}
`);
t7.Execute(os.Stdout, nil);
fmt.Println(); //遍历
t8 := template.New("test");
// {{range 键,值 := 变量}}{{end}} 遍历对象
// {{with 变量}}{{end}} 指定当前操作的对象
t8, _ = t8.Parse(`
{{range $k, $v := .Contact}}
{{$k}} {{$v}}
{{end}} {{with .Contact}}
{{range $k, $v := .}}
{{$k}} {{$v}}
{{end}}
{{end}}
`);
con := make(map[string]string);
con["qq"] = "123456";
con["tel"] = "13888888888";
t8.Execute(os.Stdout, Person{Contact: con});
fmt.Println(); //嵌套模板
t9 := template.New("test");
t9.Funcs(template.FuncMap{"test1": test1});
// {{define "模板名"}}模板内容{{end}} 定义模板
// {{template "模板名"}} 引入模板
// {{template "模板名" 函数}} 将函数中的值赋给模板中的{{.}}
t9, _ = t9.Parse(`
{{define "tp1"}} 我是模板1 {{end}}
{{define "tp2"}} 我是模板2 {{.}} {{end}}
{{define "tp3"}} {{template "tp1"}} {{template "tp2"}} {{end}}
{{template "tp1"}}
{{template "tp2" test1}}
{{template "tp3" test1}}
`);
t9.Execute(os.Stdout, nil);
fmt.Println(); //内置的模板函数
t10 := template.New("test");
t10.Funcs(template.FuncMap{"sum": sum});
t10, _ = t10.Parse(`
/*如果3为真,返回4,否则返回3*/
{{and 3 4}} /*call后第一个参数的返回值必须是一个函数*/
{{call sum 1 3 5 7}} /*转义文本中的html标签*/
{{"<br>"|html}} /*返回Contact索引为qq的值*/
{{index .Contact "qq"}} /*返回用js的escape处理后的文本*/
{{"?a=123&b=你好"|js}} /*返回参数的长度值*/
{{"hello"|len}} /*返回单一参数的布尔否定值*/
{{not 0}} /*如果3为真,返回3,否则返回4*/
{{or 3 4}} /*fmt.Sprint的别名*/
{{"你好"|print "世界"}} /*fmt.Sprintf的别名*
{{"你好"|printf "%d %s" 123}} /*fmt.Sprintln的别名*/
{{"你好"|println "世界"}} /*url中get参数转义*/
{{"?q=关键字&p=1"|urlquery}} /*等于*/
{{if eq 1 1}}
1=1
{{end}} /*不等于*/
{{if ne 1 1}}
1!=1
{{end}} /*小于*/
{{if lt 3 1}}
3<1
{{end}} /*小于等于*/
{{if le 3 3}}
3<=3
{{end}} /*大于*/
{{if gt 3 1}}
3>1
{{end}} /*大于等于*/
{{if ge 3 3}}
3>=3
{{end}}
`);
con2 := make(map[string]string);
con2["qq"] = "123456";
con2["tel"] = "13888888888";
t10.Execute(os.Stdout, Person{Contact: con2});
}

  

go语言template包中模板语法总结的更多相关文章

  1. go语言的模板,text/template包

    go语言的模板,text/template包 定义 模板就是将一组文本嵌入另一组文本里 传入string--最简单的替换 package main import ( "os" &q ...

  2. 4 Template层 -定义模板

    1.模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一 ...

  3. R语言-神经网络包RSNNS

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  4. Flask视图函数与模板语法

    1.Django中的CBV模式 ​ 2.Flask中的CBV和FBV def auth(func):     def inner(*args, **kwargs):         result =  ...

  5. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

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

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

  7. ES6, Angular,React和ABAP中的String Template(字符串模板)

    String Template(字符串模板)在很多编程语言和框架中都支持,是一个很有用的特性.本文将Jerry工作中使用到的String Template的特性做一个总结. ES6 阮一峰老师有一个专 ...

  8. C++中 模板Template的使用

    1.在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?答:class用于定义类,在模板引入c++后,最初定义模板的方法 ...

  9. C++中模板Template的使用

    1. 在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?class用于定义类,在模板引入c++后,最初定义模板的方法为 ...

随机推荐

  1. jenkins系列_使用scp命令进行远程文件复制遇到的坑

    转自:https://blog.csdn.net/kingboyworld/article/details/78905553 一.场景介绍 项目为微服务项目,使用jenkins进行统一部署.基本思路是 ...

  2. 国内Maven仓库 - 2018年5月2日15:54:10

    <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...

  3. Swift自定义UINavigationController(背景颜色、背景图片、返回按钮设置、字体大小等)

    1.0  自定义UINavigationController时,背景图片.颜色等只需要设置一次,所以我们可以重写  initializa  这个方法来实现我们想要的效果 override  class ...

  4. spring boot 开发非web应用程序

  5. hdu1753-大明A+B-(java大数)

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. C++字符串和向量

    陷阱:C字符串使用=和== char a_string[10]; a_string="Hello"  非法 strcpy(a_string,"Hello");  ...

  7. hbase 调试各种报错

    1.master is initializing 怎么都不知道怎么回事,直接从hbase 2.0 换到了 hbase 2.1 2.java.lang.ClassNotFoundException: o ...

  8. 05_ssm基础(四)之Spring与持久层的整合

    30.31.spring对jdbc的支持jdbcTemplate 使用Spring的JDBC准备:  1):拷贝jar:       mysql-connector-java-5.1.11.jar:M ...

  9. maven(二)基于intellij idea搭建ssm的maven项目结构

    项目配置文件整合步骤 1.这里使用maven来引入项目所需要的jar包,所以也就不需要手动来管理jar包了. pom.xml 配置模板如下: <project xmlns="http: ...

  10. Binary Logging Formats

    [Binary Logging Formats] The server uses several logging formats to record information in the binary ...