golang常用库之-标准库text/template

文章目录

  • golang常用库之-标准库text/template
    • 背景
    • 什么是text/template
    • text/template库的使用

golang常用库之-标准库text/template

背景

在许多编程场景中,我们经常需要把数据按照某种格式进行输出,比如生成HTML页面,或者生成配置文件。这时,我们就需要模板引擎的帮助。幸运的是,Go语言在标准库中就提供了两个强大的模板引擎:text/template和html/template。

什么是text/template

text/template是Go语言标准库中的一个强大工具,用于生成文本输出。它允许你定义模板,然后将数据填充到模板中,非常适合生成报告、配置文件、HTML等。

text/template库的使用

text/template库用于生成任何基于文本的格式。它使用双大括号{{和}}来定义模板的动态部分。让我们通过一个简单的例子来看一下它的使用方法。

  1. 简单的字符串插值
package mainimport ("os""text/template"
)func main() {// 定义模板tmpl := template.Must(template.New("test").Parse("你好,{{.Name}}!今天是{{.Date}}。\n"))// 准备数据data := struct {Name stringDate string}{Name: "张三",Date: "2025年5月1日",}// 执行模板并输出到标准输出err := tmpl.Execute(os.Stdout, data)if err != nil {panic(err)}
}

package mainimport ("os""text/template"
)func main() {// 显式创建template.Template对象var tmpl *template.Templatetmpl = template.New("hello")// 解析模板内容tmpl, err := tmpl.Parse("你好,{{.Name}}!今天是{{.Date}}。\n")if err != nil {panic(err)}// 准备数据data := struct {Name stringDate string}{Name: "张三",Date: "2025年5月2日",}// 执行模板err = tmpl.Execute(os.Stdout, data)if err != nil {panic(err)}
}
  1. 使用循环(range)
package mainimport ("os""text/template"
)func main() {// 定义模板const templateText = `
我的购物清单:
{{range .Items}}
- {{.}}
{{end}}总计: {{.Count}}项
`tmpl := template.Must(template.New("list").Parse(templateText))// 准备数据data := struct {Items []stringCount int}{Items: []string{"苹果", "香蕉", "橙子", "牛奶"},Count: 4,}// 执行模板err := tmpl.Execute(os.Stdout, data)if err != nil {panic(err)}
}
  1. 条件语句(if-else)
package mainimport ("os""text/template"
)func main() {// 定义模板const templateText = `
{{if .Success}}
✅ 操作成功: {{.Message}}
{{else}}
❌ 操作失败: {{.Message}}
{{end}}状态码: {{.Code}}
`tmpl := template.Must(template.New("status").Parse(templateText))// 准备数据 - 成功案例success := struct {Success boolMessage stringCode    int}{Success: true,Message: "数据已保存",Code:    200,}// 执行模板tmpl.Execute(os.Stdout, success)// 失败案例failure := struct {Success boolMessage stringCode    int}{Success: false,Message: "服务器错误",Code:    500,}tmpl.Execute(os.Stdout, failure)
}
  1. 自定义函数
package mainimport ("os""strings""text/template""time"
)func main() {// 创建模板并添加自定义函数funcMap := template.FuncMap{"upper":     strings.ToUpper,"formatDate": func(t time.Time) string {return t.Format("2006年01月02日")},}tmpl := template.New("funcs")tmpl.Funcs(funcMap)// 解析模板tmpl, err := tmpl.Parse(`
用户: {{.Name | upper}}
注册时间: {{.RegisterDate | formatDate}}
`)if err != nil {panic(err)}// 准备数据data := struct {Name         stringRegisterDate time.Time}{Name:         "李四",RegisterDate: time.Date(2024, 3, 15, 0, 0, 0, 0, time.UTC),}// 执行模板err = tmpl.Execute(os.Stdout, data)if err != nil {panic(err)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux btop 使用教程

简介 btop 是一个基于终端的现代系统资源监控器,具有美观的图形界面、响应快、功能丰富等特点。它支持查看 CPU、内存、磁盘、网络、进程,并可以方便地筛选和管理进程。 功能总览 启动命令: btop界面分为以下几部分: CPU 区域…

Vue3调度器错误解析,完美解决Unhandled error during execution of scheduler flush.

目录 Vue3调度器错误解析,完美解决Unhandled error during execution of scheduler flush. 一、问题现象与本质 二、七大高频错误场景与解决方案 1、Setup初始化陷阱 2、模板中的"幽灵属性" 3、异步操作的"定时炸弹" 4、组件嵌套黑洞 5…

使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例

前言 本来想再发几个小游戏后在整理一下流程的,但是今天试了一下这个俄罗斯方块的游戏结果发现本来修改的好好的的,结果后面越改越乱,前面的版本也没保存,根据AI修改他是在几个版本改来改去,想着要求还是不能这么高。…

Kotlin带接收者的Lambda介绍和应用(封装DialogFragment)

先来看一个具体应用:假设我们有一个App,App中有一个退出应用的按钮,点击该按钮后并不是立即退出,而是先弹出一个对话框,询问用户是否确定要退出,用户点了确定再退出,点取消则不退出,…

ES6/ES11知识点 续一

模板字符串 在 ECMAScript(ES)中,模板字符串(Template Literals)是一种非常强大的字符串表示方式,它为我们提供了比传统字符串更灵活的功能,尤其是在处理动态内容时。模板字符串通过反引号&…

【C++】智能指针RALL实现shared_ptr

个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 1. 为什么需要智能指针?2. 内存泄漏2.1 什么是内存泄漏,内存泄漏的危害2.2 内存泄漏分类(了解)2.3 如何…

ROS2 开发踩坑记录(持续更新...)

1. 从find_package(xxx REQUIRED)说起,如何引用其他package(包) 查看包的安装位置和include路径详细文件列表 例如,xxx包名为pluginlib # 查看 pluginlib 的安装位置 dpkg -L ros-${ROS_DISTRO}-pluginlib | grep include 这条指令的目的是…

系统思考:困惑源于内心假设

不要怀疑,你的困惑来自你的假设。 你是否曾经陷入过无解的困境,觉得外部环境太复杂,自己的处境无法突破?很多时候,答案并不在于外部的局势,而是来自我们内心深处的假设——那些我们理所当然、从未质疑过的…

GitHub修炼法则:第一次提交代码教学(Liunx系统)

前言 github是广大程序员们必须要掌握的一个技能,万事开头难,如果成功提交了第一次代码,那么后来就会简单很多。网上的相关资料往往都不是从第一次开始,导致很多新手们会在过程中遇到很多权限认证相关的问题,进而被卡…

沥青路面裂缝的目标检测与图像分类任务

文章题目是《A grid‐based classification and box‐based detection fusion model for asphalt pavement crack》 于2023年发表在《Computer‐Aided Civil and Infrastructure Engineering》 论文采用了一种基于网格分类和基于框的检测(GCBD)&#xff…

【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)

ORM模型 在Flask中,ORM(Object-Relational Mapping,对象关系映射)模型是指使用面向对象的方式来操作数据库的编程技术。它允许开发者使用Python类和对象来操作数据库,而不需要直接编写SQL语句。 核心概念 1. ORM模型…

C/C++滑动窗口算法深度解析与实战指南

C/C滑动窗口算法深度解析与实战指南 引言 滑动窗口算法是解决数组/字符串连续子序列问题的利器,通过动态调整窗口边界,将暴力解法的O(n)时间复杂度优化至O(n)。本文将系统讲解滑动窗口的核心原理、C/C实现技巧及经典应用场景,助您掌握这一高…

Vuex使用指南:状态管理

一、什么是状态管理?为什么需要 Vuex? 1. 状态管理的基本概念 在 Vue 应用中,状态指的是应用中的数据。例如: 用户登录状态购物车中的商品文章列表的分页信息 状态管理就是对这些数据的创建、读取、更新和删除进行有效管理。 …

【信息系统项目管理师-论文真题】2007下半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题1:大型项目的计划与监控1、写作要点2、解题思路大型信息系统项目的组织制订大型信息系统项目进度计划的方法试题2:组织级项目管理的绩效考核1、写作要点2、解题思路在项目考核过程中会遇到哪些问题项目的…

项目管理学习-CSPM(1)

01引言 最近在学习CSPM的课程,有部分的内容自己还是受益匪浅的,建议有需要提升项目管理能力的同学可以以考促学的方式进行学习,下面整理了一部分内容和大家分享和学习。CSPM全称 China Standards Project Management,中文名项目管…

介绍分治、动态规划、回溯分别是什么?有什么联系和区别?给出对象的场景和java代码?

一、分治算法(Divide and Conquer) 概念: 分治算法是将一个复杂问题分成若干个子问题,每个子问题结构与原问题类似,然后递归地解决这些子问题,最后将子问题的结果合并得到原问题的解。 特点:…

解锁DeepSeek模型微调:从小白到高手的进阶之路

目录 一、DeepSeek 模型初相识二、探秘微调原理2.1 迁移学习基础2.2 微调的参数更新机制 三、数据准备3.1 数据收集3.2 数据标注3.3 数据预处理 四、模型选择与加载4.1 选择合适的预训练模型4.2 加载模型 五、微调训练实战5.1 确定微调策略5.2 设置训练参数5.3 训练过程 六、模…

端到端观测分析:从前端负载均衡到后端服务

前言 我们在做系统运维保障的时候,关注从前端负载均衡到后端服务的流量情况是很有必要的,可以了解每个后端服务实例接收的流量大小,这有助于确定资源分配是否合理,能够帮助找出后端服务中的性能瓶颈。同时,当系统出现…

Ubuntu下OCC7.9+Qt5 快速搭建3D可视化框架

Ubuntu下OCC7.9+Qt5搭建简易的项目框架 近两年国产CAD替代如日中天,而几何内核作为CAD软件的核心组件之一,当前有且仅有唯一开源的几何内核库即OCCT;这里为各位自立于投入CAD开发或正在学习OCC库的小伙伴们奉献上一个快速搭建QT+OCC的项目框架; 本文介绍了Qt5+Occ 显示几何…

C++类与对象—下:夯实面向对象编程的阶梯

9. 赋值运算符重载 9.1 运算符重载 在 C 里,运算符重载能够让自定义类型的对象像内置类型那样使用运算符,这极大地提升了代码的可读性与可维护性。运算符重载本质上是一种特殊的函数,其函数名是 operator 加上要重载的运算符。 下面是运算…