GO学习笔记 - 模版渲染及多种输出
2019-08-18 13:44
976 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Loveychent/article/details/99703931
本文主题:基于内置的text/template实现Golang模版渲染,并将结果写入文件、屏幕、变量。
小慢哥的原创文章,欢迎转载
目录
▪ 定义结构体
▪ 定义模版文本
▪ 模版渲染及输出方式
▪ 完整例子
定义结构体
首先,定义一个结构体,用于后面的模版渲染
type Person struct { Name string Age int Boy bool }
注意:struct的元素必须要可导出(大写打头),否则渲染时候找不到
实例化结构体,用于模版渲染时候获得对应值
foo := Person{ Name: "foo", Age: 18, Boy: false, }
定义模版文本
接下来,定义一个模版文本,此处直接定义了一个常量,表示模版文本
const text = `My name is {{.Name}}, I'm {{.Age}} years old, I'm a {{if .Boy}}boy{{else}}girl{{end}}. `
读取文本,获取template的handler
tmpl, err := template.New("").Parse(text) if err != nil { log.Fatalln(err) }
模版渲染及输出方式
在渲染时候需要传递一个参数,用于指定输出到何处,常见的有3种目的地:
▷ 输出到文件
▷ 输出到变量
▷ 输出到屏幕
输出到文件:需要先open一个文件并获得文件句柄
f, err := os.OpenFile("/tmp/test", os.O_WRONLY|os.O_CREATE, 0644) defer f.Close() if err != nil { log.Fatalln(err) } // 渲染并写入文件 if err := tmpl.Execute(f, foo); err != nil { log.Fatalln(err) }
输出到变量
var buf bytes.Buffer if err := tmpl.Execute(&buf, foo); err != nil { log.Fatalln(err) } fmt.Println(buf.String())
输出到屏幕
if err := tmpl.Execute(os.Stdout, foo); err != nil { log.Fatalln(err) }
完整例子
package main import ( "log" "os" "text/template" ) type Person struct { Name string Age int Boy bool } func main() { // 实例化结构体 foo := Person{ Name: "foo", Age: 18, Boy: false, } // 定义模版文本 const text = `My name is {{.Name}}, I'm {{.Age}} years old, I'm a {{if .Boy}}boy{{else}}girl{{end}}. ` // 根据指定模版文本生成handler tmpl, err := template.New("").Parse(text) if err != nil { log.Fatalln(err) } // 模版渲染,并写入文件 f, err := os.OpenFile("/tmp/test", os.O_WRONLY|os.O_CREATE, 0644) defer f.Close() if err != nil { log.Fatalln(err) } if err := tmpl.Execute(f, foo); err != nil { log.Fatalln(err) } // 模版渲染,并赋值给变量 var buf bytes.Buffer if err := tmpl.Execute(&buf, foo); err != nil { log.Fatalln(err) } fmt.Println(buf.String()) // 模版渲染,并输出到屏幕标准输出 if err := tmpl.Execute(os.Stdout, foo); err != nil { log.Fatalln(err) }}
测试效果
# 编译 go build template.go ./template # 输出 My name is foo, I'm 18 years old, I'm a girl. My name is foo, I'm 18 years old, I'm a girl. # 查看文件(/tmp/test)内容 My name is foo, I'm 18 years old, I'm a girl.
相关文章推荐
- GO学习笔记 - 模版渲染及多种输出
- OpenCV3 第四章学习笔记-------Mat用法、多种格式化输出方法、常用数据结果、基本绘图操作
- Go语言学习笔记(四) [array、slice、map]
- Go 学习笔记
- TCP/IP网络编程 学习笔记_10 --套接字的多种可选项
- Java学习笔记--输入/输出
- Go语言并发与并行学习笔记(二)
- 2013.7.29 学习笔记《windows核心编程》(四) 字符输出
- Python 学习笔记之八——输入和输出
- 【原创】斌伯的DirectX学习笔记(3)--DirectX的图形渲染
- Windows学习笔记7——文字输出<一>
- Go语言学习笔记8
- 找一个网页,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间、名称和地点——python学习笔记
- 2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记
- Go语言学习笔记---包
- Python学习笔记之格式化输出
- 第六周学习笔记之如何在各类控件中输入/输出数据
- java学习笔记IO输入与输出——IO流概述及字节流(2)
- Go语言学习笔记
- linux学习笔记—输出重定向