Golang轻松实现消息模板变量替换:text/template
text/template 是 Go 语言标准库中的一个包,用于生成文本输出。它通过解析模板并根据给定的数据执行模板来生成最终的文本。text/template 提供了强大的模板引擎,支持条件判断、循环、变量替换等功能。
基本概念
- 模板:模板是一个文本文件或字符串,其中包含一些特殊的占位符或控制结构,用于动态生成内容。
- 数据:数据是一个 Go 语言的结构体、映射或其他数据结构,模板引擎会根据这些数据来填充模板中的占位符。
- 动作:动作是模板中的特殊语法,用于控制模板的解析和执行过程。动作以
{{开始,以}}结束。
模板语法
1. 变量替换
最简单的模板动作是变量替换。使用 {{.}} 来表示当前上下文的根对象,使用 {{.FieldName}} 来访问结构体的字段。
package mainimport ("os""text/template"
)type Person struct {Name stringAge int
}func main() {p := Person{Name: "Alice", Age: 30}tmpl := "Name: {{.Name}}, Age: {{.Age}}\n"t := template.Must(template.New("person").Parse(tmpl))t.Execute(os.Stdout, p)
}
输出:
Name: Alice, Age: 30
2. 条件判断
text/template 支持 if-else 条件判断。
package mainimport ("os""text/template"
)type Person struct {Name stringAge int
}func main() {p := Person{Name: "Alice", Age: 30}tmpl := "{{if gt .Age 18}}Adult{{else}}Child{{end}}\n"t := template.Must(template.New("person").Parse(tmpl))t.Execute(os.Stdout, p)
}
输出:
Adult
3. 循环
text/template 支持 range 循环,用于遍历数组、切片或映射。
package mainimport ("os""text/template"
)type Person struct {Name stringHobbies []string
}func main() {p := Person{Name: "Alice", Hobbies: []string{"Reading", "Swimming", "Coding"}}tmpl := "Name: {{.Name}}\nHobbies:\n{{range .Hobbies}}- {{.}}\n{{end}}"t := template.Must(template.New("person").Parse(tmpl))t.Execute(os.Stdout, p)
}
输出:
Name: Alice
Hobbies:
- Reading
- Swimming
- Coding
4. 函数调用
text/template 支持在模板中调用自定义函数。
package mainimport ("os""text/template""strings"
)type Person struct {Name string
}func main() {p := Person{Name: "Alice"}funcMap := template.FuncMap{"ToUpper": strings.ToUpper,}tmpl := "Name: {{.Name | ToUpper}}\n"t := template.Must(template.New("person").Funcs(funcMap).Parse(tmpl))t.Execute(os.Stdout, p)
}
输出:
Name: ALICE
5. 嵌套模板
text/template 支持模板嵌套,可以使用 define 和 template 动作来定义和引用嵌套模板。
package mainimport ("os""text/template"
)type Person struct {Name string
}func main() {p := Person{Name: "Alice"}tmpl := `{{define "T1"}}Hello, {{.Name}}!{{end}}{{template "T1" .}}`t := template.Must(template.New("person").Parse(tmpl))t.Execute(os.Stdout, p)
}
输出:
Hello, Alice!
模板解析和执行过程
- 解析模板:使用
template.New创建一个新的模板对象,然后使用Parse或ParseFiles方法解析模板内容。 - 执行模板:使用
Execute或ExecuteTemplate方法执行模板,并将结果写入指定的输出流(如os.Stdout或文件)。
错误处理
在解析和执行模板时,可能会遇到错误。可以使用 Must 函数来简化错误处理,如果解析或执行过程中出现错误,Must 会直接抛出 panic。
t := template.Must(template.New("person").Parse(tmpl))
相关文章:
Golang轻松实现消息模板变量替换:text/template
text/template 是 Go 语言标准库中的一个包,用于生成文本输出。它通过解析模板并根据给定的数据执行模板来生成最终的文本。text/template 提供了强大的模板引擎,支持条件判断、循环、变量替换等功能。 基本概念 模板:模板是一个文本文件或…...
DeepSeek模型R1服务器繁忙,怎么解决?
在当今科技飞速发展的时代,人工智能领域不断涌现出令人瞩目的创新成果,其中DeepSeek模型无疑成为了众多关注焦点。它凭借着先进的技术和卓越的性能,在行业内掀起了一股热潮,吸引了无数目光。然而,如同许多前沿技术在发…...
《探秘Windows 10驱动开发:从入门到实战》
《探秘Windows 10驱动开发:从入门到实战》 为什么要在 Windows 10 编写驱动程序 在当今数字化时代,计算机已成为人们生活和工作中不可或缺的工具 ,而 Windows 10 作为一款广泛使用的操作系统,其生态系统的丰富性和复杂性不言而喻。在这个庞大的体系中,驱动程序扮演着举足…...
Golang的容器化部署流程
# Golang的容器化部署流程 什么是容器化部署 容器化部署是将应用程序、运行环境及其依赖项打包在一起,以便可以在任何环境中快速、一致地运行的技术。它提供了更高效的资源利用、更便捷的部署和更稳定的环境。 的容器化支持 天生支持跨平台编译,使得将Go…...
计算机网络,大白话
好嘞,咱就从头到尾,给你好好说道说道计算机网络里这些“门门道道”的概念: 1. 网络(Network) 啥是网络? 你可以把网络想象成一个“大Party”,大家(设备)聚在一起&#…...
智慧城市V4系统小程序源码独立版全插件全开源
智慧城市V4系统小程序源码:多城市代理同城信息服务的全域解决方案 在数字化浪潮的推动下,智慧城市已成为全球发展的核心战略。作为这一领域的革新者,智慧城市V4系统小程序源码凭借其多城市代理同城信息服务能力与多商家营销功能,…...
SpringBoot分布式应用程序和数据库在物理位置分配上、路由上和数量上的最佳实践是什么?
在设计和部署Spring Boot分布式应用程序时,物理位置分配、路由和数据库数量的最佳实践对系统性能、可用性和可维护性至关重要。以下是相关建议: 1. 物理位置分配 最佳实践: 靠近用户部署:将应用实例部署在靠近用户的数据中心&a…...
【LeetCode Hot100 哈希】两数之和、字母异位词分组、最长连续序列
哈希 1. 两数之和题目描述解题思路步骤:时间复杂度:空间复杂度: 代码实现 2. 字母异位词分组题目描述解题思路步骤:时间复杂度:空间复杂度: 代码实现 3. 最长连续序列题目描述解题思路关键思路:…...
Jenkins 通过 Execute Shell 执行 shell 脚本 七
Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…...
无人机常见的定位方式
目录 1、卫星导航定位 2、基于地面基站定位 3、惯性导航定位 4、视觉定位 5、其他定位技术 目前无人机的定位方式主要有以下几种: 1、卫星导航定位 GPS 定位:全球定位系统是应用最广泛的卫星导航系统,无人机上的 GPS 接收器接收至少四…...
【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 相关笔记: https://blog.csdn.net/dj…...
使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序
作者:来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪,而无需任何代码更改。 介绍 去年,我们宣布了 OpenTelemetry…...
基于 STM32 的病房监控系统
标题:基于 STM32 的病房监控系统 内容:1.摘要 基于 STM32 的病房监控系统摘要:本系统采用 STM32 微控制器作为核心,通过传感器实时监测病房内的环境参数,如温度、湿度、光照等,并将数据上传至云端服务器。医护人员可以通过手机或…...
线上HBase client返回超时异常分析 HBase callTimeout=60000
问题现象 HBase client直接返回超时异常 HBase callTimeout=60000, callDuration=60301: row ‘12649160863966c2790195059018040900010003320’ on table ‘Z_UPA’ at region=Z_UPA,1213d1a56,1184027415643. ba7224f83dbb09591a74b7059f17., hostname=abcd,60020,891863950…...
03.开闭原则详细介绍
03.开闭原则详细介绍 目录介绍 01.问题思考的分析02.如何理解开闭原则03.开闭原则的背景04.开闭原则比较难学05.实现开闭原则方式06.画图形案例分析07.银行业务案例分析08.开闭原则优缺点09.开闭原则的总结 推荐一个好玩网站 一个最纯粹的技术分享网站,打造精品…...
前端职业规划
前端开发的职业规划可以根据个人兴趣、技术深度和职业目标来制定。以下是一个典型的前端开发者职业发展路径,涵盖了从初级到高级的不同阶段,以及未来的发展方向: 1. 初级阶段(0-2 年) 目标:掌握基础技能&a…...
杂记:STM32 调试信息打印实现方式
杂记:STM32 调试信息打印实现方式 一、引言二、使用 USART 串口打印原理(二)实现步骤硬件连接代码实现 使用 ST - LINK 调试器 ITM 打印(一)原理(二)实现步骤硬件连接代码实现 四、使用 Semihos…...
python+unity落地方案实现AI 换脸融合
先上效果再说技术结论,使用的是自行搭建的AI人脸融合库,可以离线不受限制无限次生成,有需要的可以后台私信python ai换脸融合。 TODO 未来的方向:3D人脸融合和AI数据训练 这个技术使用的是openvcinsighface,openvc…...
ComfyUI流程图生图原理详解
一、引言 ComfyUI 是一款功能强大的工具,在图像生成等领域有着广泛应用。本文补充一点ComfyUI 的安装与配置过程遇到的问题,并深入剖析图生图过程及相关参数,帮助读者快速入门并深入理解其原理。 二、ComfyUI 的安装与配置中遇到的问题 &a…...
【C++ 真题】P1824 进击的奶牛
P1824 进击的奶牛 题目描述 Farmer John 建造了一个有 N N N( 2 ≤ N ≤ 1 0 5 2 \leq N \leq 10 ^ 5 2≤N≤105) 个隔间的牛棚,这些隔间分布在一条直线上,坐标是 x 1 , x 2 , ⋯ , x N x _ 1, x _ 2, \cdots, x _ N x1,x2,⋯,xN&a…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
