golang 模板(test/template)
来源:互联网 发布:java工程师转正申请 编辑:程序博客网 时间:2024/06/05 16:16
转载自:http://blog.csdn.net/u010165367/article/details/51530885
模板就是将一组文本嵌入另一组文本里
1. 传入string–最简单的替换
package mainimport ( "os" "text/template")func main() { name := "happy" tmpl, err := template.New("test").Parse("hello, {{.}}") //建立一个模板,内容是"hello, {{.}}" err = tmpl.Execute(os.Stdout, name) //将string与模板合成,变量name的内容会替换掉{{.}} //合成结果放到os.Stdout里}
//输出 : hello,happy
2. 传入struct
模板合成那句,第2个参数是interface{},所以可以传入任何类型,现在传入struct看看 要取得struct的值,只要使用成员名字即可,看代码吧:
package mainimport ( "os" "text/template")type Inventory struct { Material string Count uint}func main() { sweaters := Inventory{"wool", 17} muban := "{{.Count}} items are made of {{.Material}}" tmpl, err := template.New("test").Parse(muban) //建立一个模板 if err != nil { panic(err) } err = tmpl.Execute(os.Stdout, sweaters) //将struct与模板合成,合成结果放到os.Stdout里 if err != nil { panic(err) } }
//输出 : 17 items are made of wool
3. 多模板,介绍New,Name,Lookup
//一个模板可以有多种,以Name来区分
muban_eng := "{{.Count}} items are made of {{.Material}}"muban_chn := "{{.Material}}做了{{.Count}}个项目"
//建立一个模板的名称是china,模板的内容是muban_chn字符串
tmpl, err := template.New("china")tmpl, err = tmpl.Parse(muban_chn)
//建立一个模板的名称是english,模板的内容是muban_eng字符串
tmpl, err = tmpl.New("english")tmpl, err = tmpl.Parse(muban_eng)
//将struct与模板合成,用名字是china的模板进行合成,结果放到os.Stdout里,内容为“wool做了17个项目”
err = tmpl.ExecuteTemplate(os.Stdout, "china", sweaters)
//将struct与模板合成,用名字是china的模板进行合成,结果放到os.Stdout里,内容为“17 items are made of wool”
err = tmpl.ExecuteTemplate(os.Stdout, "english", sweaters)tmpl, err = template.New("english")fmt.Println(tmpl.Name()) //打印出englishtmpl, err = tmpl.New("china")fmt.Println(tmpl.Name()) //打印出chinatmpl=tmpl.Lookup("english")//必须要有返回,否则不生效fmt.Println(tmpl.Name()) //打印出english
4. 文件模板,介绍ParseFiles
//模板可以是一行
muban := "{{.Count}} items are made of {{.Material}}"
//也可以是多行
muban := `items number is {{.Count}}there made of {{.Material}}`
把模板的内容发在一个文本文件里,用的时候将文本文件里的所有内容赋值给muban这个变量即可
上面的想法可以自己实现,但其实tamplate包已经帮我们封装好了,那就是template.ParseFiles方法
假设有一个文件mb.txt的内容是muban变量的内容
$cat mb.txt
{{.Count}} items are made of {{.Material}}
那么下面2行
muban := "{{.Count}} items are made of {{.Material}}"tmpl, err := template.New("test").Parse(muban) //建立一个模板
等价于
tmpl, err := template.ParseFiles("mb.txt") //建立一个模板,这里不需要new("name")的方式,因为name自动为文件名
5.文件模板,介绍ParseGlob
ParseFiles接受一个字符串,字符串的内容是一个模板文件的路径(绝对路径or相对路径)
ParseGlob也差不多,是用正则的方式匹配多个文件
假设一个目录里有a.txt b.txt c.txt的话
用ParseFiles需要写3行对应3个文件,如果有一万个文件呢?
而用ParseGlob只要写成template.ParseGlob(“*.txt”) 即可
模板的输出,介绍ExecuteTemplate和Execute
模板下有多套模板,其中有一套模板是当前模板
可以使用Name的方式查看当前模板
err = tmpl.ExecuteTemplate(os.Stdout, "english", sweaters) //指定模板名,这次为englisherr = tmpl.Execute(os.Stdout, sweaters) //模板名省略,打印的是当前模板
6.模板的复用
模板里可以套模板,以达到复用目的,用template关键字
muban1 := `hi, {{template "M2"}},hi, {{template "M3"}}`muban2 := "我是模板2,{{template "M3"}}"muban3 := "ha我是模板3ha!"tmpl, err := template.New("M1").Parse(muban1)tmpl.New("M2").Parse(muban2)tmpl.New("M3").Parse(muban3)err = tmpl.Execute(os.Stdout, nil)
完整代码:
package mainimport ( "os" "text/template")func main() { muban1 := `hi, {{template "M2"}},hi, {{template "M3"}}` muban2 := `我是模板2,{{template "M3"}}` muban3 := "ha我是模板3ha!" tmpl, err := template.New("M1").Parse(muban1) if err != nil { panic(err) } tmpl.New("M2").Parse(muban2) if err != nil { panic(err) } tmpl.New("M3").Parse(muban3) if err != nil { panic(err) } err = tmpl.Execute(os.Stdout, nil) if err != nil { panic(err) } }
输出的内容
hi, 我是模板2,ha我是模板3ha!,
hi, ha我是模板3ha!
- golang 模板(test/template)
- golang中的模板template
- golang 模板(template)的常用基本语法
- golang 模板(template)的常用基本语法
- golang 模板(template)的常用基本语法
- Golang Template
- golang template
- 利用golang的template模板包进行web开发
- Template(模板)
- 模板模式(Template)
- 模板(Template)
- 模板(Template)
- Template(模板)
- 模板(Template)
- 模板(Template)
- C++模板(template)
- C++模板(template)
- test template
- Java并发包多线程总结
- Spring,为内部方法新起一个事务,此处应有坑。
- PuTTY字体颜色设置
- Hdu 4614 Vases and Flowers【二分+线段树】
- 高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少
- golang 模板(test/template)
- 摘抄(计算机网络)极其缓慢 施工中。。。。。。。。。
- 使用@responsebody 出现406问题
- poj 2686 Traveling by Stagecoach(状态压缩dp)
- vue学习笔记2——部分词名及一些定义的理解
- namedWindow创建窗口的作用域
- VS 主题设置,背景全黑、护眼、关键字清晰可见,2010 2012 2013都能够使用,程序员必备
- Grunt 新手一日入门
- Mybatis关联查询