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 ... 
随机推荐
- 在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体
			在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体 在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体ShowAllPage sAllPage = new ShowAllPage(); ... 
- WPF——如何为项目设置全局样式。
			在项目中,需要为所有的Button.TextBox设置一个默认的全局样式,一个个的为多个控件设置相同的样式显然是不明智的.在WPF中可以通过资源设置全局样式,主要有俩种方法: 1.第一种就是先写好按钮 ... 
- hive creating temporary folder on:  Error encountered near token 'TOK_TMP_FILE'
			执行create tmp.tablename as select .....语句的时候报以下错误: SemanticException 0:0 creating temporary folder o ... 
- Python3---爬虫---抓取百度贴吧
			前言 该文章主要描述如何抓取百度贴吧内容.当然是简单爬虫实现功能,没有实现输入参数过滤等辅助功能,仅供小白学习. 修改时间:20191219 天象独行 import os,urllib.request ... 
- Winform中在ZedGraph中最多可以添加多少条曲线
			场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ... 
- Winform中在使用Dock属性设计页面布局控件的顺序导致页面效果不同的问题
			场景 在Winform中进行页面设计时,常使用控件的Dock属性来进行布局调整.但是由于设置属性的顺序问题,导致达不到想要的效果. 比如以下两个控件 下面的控件设置的Dock属性是Bottom,即在页 ... 
- GO基础之函数
			一.Go语言函数的格式 函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func.函数名.参数列表.返回值.函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块. 函 ... 
- CSS3 新增选择器
			CSS3 新增选择器 结构(位置)伪类选择器(CSS3) :first-child :选取属于其父元素的首个子元素的指定选择器 :last-child :选取属于其父元素的最后一个子元素的指定选择器 ... 
- JS是解释型还是编译型语言?
			解释型和编译型语言 解释型语言 解释型语言是对代码进行一句一句的直接运行,在程序运行期间,使用解释器动态将代码解释为机器码,再运行. 编译型语言 编译型语言是需要使用编译器先对代码进行编译为机器码,再 ... 
- NSURLSession中的downloadTask的使用
			1.用downloadTask下载图片 优点:简单 缺点:不能监听下载的进度 代码示例: NSURL *url = [NSURL URLWithString:@"http://pic1.wi ... 
