本文主题:基于内置的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学习笔记 - 模版渲染及多种输出的更多相关文章

  1. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  2. Java学习笔记:基本输入、输出数据操作实例分析

    Java学习笔记:基本输入.输出数据操作.分享给大家供大家参考,具体如下: 相关内容: 输出数据: print println printf 输入数据: Scanner 输出数据: JAVA中在屏幕中 ...

  3. React学习笔记 - 元素渲染

    React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...

  4. Webpack4 学习笔记五 图片解析、输出的文件划分目录

    前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 webpack打包图片和划分文件路径 使用图片的方式 通过 new Image() 在 css中设置 background-imag ...

  5. ‎Cocos2d-x 学习笔记(25) 渲染 绘制 Render

    [Cocos2d-x]学习笔记目录 本文链接:https://www.cnblogs.com/deepcho/p/cocos2dx-render.html 1. 从程序入口到渲染方法 一个Cocos2 ...

  6. Unity3D学习笔记12——渲染纹理

    目录 1. 概述 2. 详论 3. 问题 1. 概述 在文章<Unity3D学习笔记11--后处理>中论述了后处理是帧缓存(Framebuffer)技术实现之一:而另外一个帧缓存技术实现就 ...

  7. 《UnityShader入门精要》学习笔记之渲染流水线

    第一种分类方式: 图形管道(如下7步): 顶点数据 : 由3D模型传递的三角形网格 顶点着色 : 编写CG程序对各个顶点进行着色 生成几何图元 : 连接特定的顶点生成几何图元,例如连接三个顶点生成一个 ...

  8. pandas学习笔记 - 文件的写入和输出

    # -*- coding: utf-8 -*- """ Created on Tue Aug 28 22:19:26 2018   @author: Dev " ...

  9. PYTHON 100days学习笔记008-3:输入和输出

    目录 Day008-03:Python3 输入和输出 1.输出格式美化 1.1 str.format()用法 1.2 旧式字符串格式化 2.读取键盘输入 3.读和写文件 4.文件对象的方法 4.1 f ...

随机推荐

  1. sqlite3数据库最大可以是多大?可以存放多少数据?读写性能怎么样?

    sqlite是款不错的数据库,使用方便,不需要事先安装软件,事先建表.很多人担心它的性能和数据存储量问题. 比如有的网友问:Sqlite数据库最大可以多大呀?会不会像acc数据库那样,几十MB就暴掉了 ...

  2. .net core 后台如何生成html字符串到前台_后台html字符串在前台显示编码状态

    1-后台生成html字符串的方法一般是: this.ViewData.Add("CURRENCY_SYMBOLS", new HtmlString(JsonHelper.Conve ...

  3. InnoSetup 安装选择不同语言,修改软件配置参数,达到安装语言就是软件语言效果

    需求 在软件安装时,选择中英文安装界面,选择的中英文界面就是对应软件内界面语言. 在软件安装时,选择中文界面,打开软件就是中文界面. 在软件安装时,选择英文界面,打开软件就是英文界面. 实际上,就是在 ...

  4. go实现整型的二进制转化

    go中已经实现了int->bin的转化函数,我这里只是化过程逻辑的实现,至于原理我就假设大家都知道了 本案例只考虑 int->bin  的转化 包含了正整数,负整数,0 的转化 packa ...

  5. LinuxShell——管道命令

    LinuxShell——管道命令 摘要:本文主要学习了Shell中的管道命令. grep命令 grep命令的作用是在文件中提取和匹配符合条件的字符串行,全称是Global Regular Expres ...

  6. rsync 未授权访问漏洞

    rsync rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 &qu ...

  7. 并发修改异常ConcurrentModificationException

    1.简述:在使用 迭代器对象遍历集合时,使用集合对象修改集合中的元素导致出现异常 public static void main(String[] args) { List<Integer> ...

  8. C++ 基础语法 快速复习笔记(3)---重载函数,多态,虚函数

    1.重载运算符和重载函数: C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它 ...

  9. 常见的Dos命令大全

    打开cmd: Win键+R  输入cmd; 常用的Dos命令: 1.盘符切换: 2.打开文件目录:   dir 3.清理屏幕:  cls 4.退出: exit 5.查看本机IP地址:ipconfig ...

  10. 03webpack--输入webpack--自动打包

    如何实现时时跟新我写的代码 此时就需要有一个配置文件了 webpack.config.js这个文件 这个文件是在跟目录下哦 webpack是基于node去构建的 所以你的依法和node还是很相似的哦 ...