GO学习笔记 - 模版渲染及多种输出
本文主题:基于内置的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学习笔记 - 模版渲染及多种输出的更多相关文章
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- Java学习笔记:基本输入、输出数据操作实例分析
Java学习笔记:基本输入.输出数据操作.分享给大家供大家参考,具体如下: 相关内容: 输出数据: print println printf 输入数据: Scanner 输出数据: JAVA中在屏幕中 ...
- React学习笔记 - 元素渲染
React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...
- Webpack4 学习笔记五 图片解析、输出的文件划分目录
前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 webpack打包图片和划分文件路径 使用图片的方式 通过 new Image() 在 css中设置 background-imag ...
- Cocos2d-x 学习笔记(25) 渲染 绘制 Render
[Cocos2d-x]学习笔记目录 本文链接:https://www.cnblogs.com/deepcho/p/cocos2dx-render.html 1. 从程序入口到渲染方法 一个Cocos2 ...
- Unity3D学习笔记12——渲染纹理
目录 1. 概述 2. 详论 3. 问题 1. 概述 在文章<Unity3D学习笔记11--后处理>中论述了后处理是帧缓存(Framebuffer)技术实现之一:而另外一个帧缓存技术实现就 ...
- 《UnityShader入门精要》学习笔记之渲染流水线
第一种分类方式: 图形管道(如下7步): 顶点数据 : 由3D模型传递的三角形网格 顶点着色 : 编写CG程序对各个顶点进行着色 生成几何图元 : 连接特定的顶点生成几何图元,例如连接三个顶点生成一个 ...
- pandas学习笔记 - 文件的写入和输出
# -*- coding: utf-8 -*- """ Created on Tue Aug 28 22:19:26 2018 @author: Dev " ...
- PYTHON 100days学习笔记008-3:输入和输出
目录 Day008-03:Python3 输入和输出 1.输出格式美化 1.1 str.format()用法 1.2 旧式字符串格式化 2.读取键盘输入 3.读和写文件 4.文件对象的方法 4.1 f ...
随机推荐
- RV32FDQ/RV64RDQ指令集(2)
下面我们逐个看下每个指令的细节: fadd.s fadd.s rd, rs1, rs2 //f [rd] = f [rs1] + f [rs2]单精度浮点加(Floating-point Ad ...
- Python “ValueError: incomplete format” upon print(“stuff %” % “thingy”) 解决方法
直接贴代码 这里我是想匹配length i 的值并且要打印出data里面%23也就是#的url编码,但是发现这样报错了,这时候我们在%23前面多加一个%号就能够成功执行我这里测试的2.7环境,3.x ...
- SSRS 关于日期参数的范围限制
在进行SSRS Report开发的时候,我们往往会有日期\时间范围限制的需求,但参数的报表参数并没有相关的事件\属性来设置. 所以,我们需要曲线救国. 这里要说的这种方法,仅支持Microsoft S ...
- MD5 加密工具类MD5Util
我们在使用MD5 在线加密的时候,会发现下面情况,大小写的区别就不说啦,那么16位和32位有啥区别呢,其实16 位实际上是从 32 位字符串中,取中间的第 9 位到第 24 位的部分,就是str.su ...
- 一个java的http请求的封装工具类
java实现http请求的方法常用有两种,一种则是通过java自带的标准类HttpURLConnection去实现,另一种是通过apache的httpclient去实现.本文用httpclient去实 ...
- 本地Yum源配置
一.网络源 yum list 软件名称 查找源里的软件,可以使用通配符 二.配置源 源配置文件路径 /etc/yum.repos.d/ 配置项 [名称] 源标识(不能和其他的源重复) name=名称 ...
- WC 个人项目 ( node.js 实现 )
基于 node.js 的 wordCounter 个人项目 GitHub 项目地址:https://github.com/KofeChen/node.js-WordCounter 实现功能: 能够匹配 ...
- [20190531]ORA-600 kokasgi1故障模拟与恢复.txt
[20190531]ORA-600 kokasgi1故障模拟与恢复.txt --//昨天看链接:http://www.xifenfei.com/2019/05/ora-600-kokasgi1-rec ...
- TypeScript 学习笔记(一)
TypeScript: 1.是 JavaScript 的一个超集,支持 ES6 标准 2.由微软开发的自由和开源的编程语言 3.设计目标是开发大型应用,它可编译成纯 JavaScript,编译出来的 ...
- centos安装php5、卸载php、安装php7
这篇文章主要介绍了centos安装php5.卸载php.安装php7 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 首先安装php5很简单 yum install php 然后如果不 ...