更多个人笔记见:
github个人笔记仓库
gitee 个人笔记仓库
个人学习,学习过程中还会不断补充~ (后续会更新在github上)

文章目录

  • Template 模板
    • 基本示例
    • 语法
      • 1. 基本输出语法
      • 2. 控制结构
      • 3. 空白字符控制
      • 4. Must函数

Template 模板

基本示例

package mainimport ("fmt""html/template""os"
)// 定义数据结构
type Person struct {Name    stringAge     intEmail   stringIsAdmin bool
}type Company struct {Name      stringEmployees []PersonFounded   int
}func main() {// 示例1:基本语法演示basicTemplateDemo()// 示例2:条件判断和循环conditionalAndLoopDemo()// 示例3:HTML模板htmlTemplateDemo()// 示例4:Must的使用mustTemplateDemo()
}// 基本语法演示
func basicTemplateDemo() {fmt.Println("=== 基本语法演示 ===")// {{.}} 表示当前数据对象tmpl1 := `Hello {{.}}!`t1 := template.Must(template.New("basic").Parse(tmpl1))t1.Execute(os.Stdout, "World")fmt.Println()// {{.Name}} 访问结构体字段person := Person{Name: "张三", Age: 30, Email: "zhangsan@example.com"}tmpl2 := `姓名: {{.Name}}, 年龄: {{.Age}}, 邮箱: {{.Email}}`t2 := template.Must(template.New("person").Parse(tmpl2)) //person 是模板名字t2.Execute(os.Stdout, person)   //对应的结构体fmt.Println("\n")
}// 条件判断和循环演示
func conditionalAndLoopDemo() {fmt.Println("=== 条件判断和循环演示 ===")company := Company{Name:    "科技公司",Founded: 2020,Employees: []Person{{Name: "李四", Age: 25, Email: "lisi@example.com", IsAdmin: true},{Name: "王五", Age: 28, Email: "wangwu@example.com", IsAdmin: false},{Name: "赵六", Age: 32, Email: "zhaoliu@example.com", IsAdmin: false},},}// 使用 {{range .}} 循环和 {{if}} 条件判断// {{- 和 -}} 用于去除空白字符tmpl := `公司: {{.Name}} (成立于 {{.Founded}}年)员工列表:{{- range .Employees}}- 姓名: {{.Name}}{{- if .IsAdmin}} (管理员){{else}} (普通员工){{end}} 年龄: {{.Age}}, 邮箱: {{.Email}}{{- end}}`//通过IsAdmin 进行判断是否是管理员t := template.Must(template.New("company").Parse(tmpl))t.Execute(os.Stdout, company) //传入的 company 是一个大结构体,里面包括 Employees 列表fmt.Println()
}// HTML模板演示
func htmlTemplateDemo() {fmt.Println("=== HTML模板演示 ===")// HTML模板会自动转义特殊字符htmlTmpl := `
<!DOCTYPE html>
<html>
<head><title>{{.Name}} - 员工列表</title>
</head>
<body><h1>{{.Name}}</h1><p>成立年份: {{.Founded}}</p><h2>员工信息</h2><table border="1"><tr><th>姓名</th><th>年龄</th><th>邮箱</th><th>角色</th></tr>{{- range .Employees}}<tr><td>{{.Name}}</td><td>{{.Age}}</td><td>{{.Email}}</td><td>{{- if .IsAdmin -}}<span style="color: red;">管理员</span>{{- else -}}普通员工{{- end -}}</td></tr>{{- end}}</table>
</body>
</html>
`company := Company{Name:    "示例科技公司",Founded: 2020,Employees: []Person{{Name: "张三", Age: 30, IsAdmin: true},{Name: "李四", Age: 25, IsAdmin: false},},}// 创建HTML文件file, err := os.Create("company.html")  //创建接收的文件if err != nil {panic(err)}defer file.Close()t := template.Must(template.New("html").Parse(htmlTmpl))t.Execute(file, company)  //这里不是 os.stdout输出了,而是输出到了文件中fmt.Println("HTML文件已生成: company.html")
}// Must的使用演示
func mustTemplateDemo() {fmt.Println("=== Must使用演示 ===")// Must会在模板解析失败时直接panic// 这是一个正确的模板validTemplate := `Hello {{.Name}}!`t1 := template.Must(template.New("valid").Parse(validTemplate))person := Person{Name: "测试用户"}fmt.Print("正确模板输出: ")t1.Execute(os.Stdout, person)fmt.Println()// 演示错误处理(注释掉以避免程序崩溃)/*// 这是一个错误的模板语法,Must会直接panicinvalidTemplate := `Hello {{.Name!` // 缺少右括号t2 := template.Must(template.New("invalid").Parse(invalidTemplate))*/// 不使用Must的错误处理方式invalidTemplate := `Hello {{.Name!`  //这里缺少了右边括号    t2, err := template.New("invalid").Parse(invalidTemplate) //没有用 Must,用 Must 会 panic 导致程序退出if err != nil {fmt.Printf("模板解析错误: %v\n", err)} else {t2.Execute(os.Stdout, person)}
}

语法

1. 基本输出语法

  • {{.}}: 输出当前数据对象
  • {{.Name}}: 输出结构体的Name字段
  • {{.Field.SubField}}: 访问嵌套字段

2. 控制结构

  • {{if .IsAdmin}}...{{else}}...{{end}}: 条件判断
  • {{range .Employees}}...{{end}}: 循环遍历
  • {{with .Field}}...{{end}}: 设置上下文

3. 空白字符控制

  • {{-: 去除左侧空白字符
  • -}}: 去除右侧空白字符
  • {{- if .IsAdmin -}}: 去除两侧空白字符

4. Must函数

  • template.Must(): 在模板解析失败时直接panic
  • 适用于程序启动时的模板初始化
  • 类似于panic的检验机制
  • 如果需要接受错误就不要用 Must

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

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

相关文章

origin绘图之【如何将多条重叠、高度重叠的点线图、折线图分开】

在日常的数据可视化工作中&#xff0c;Origin 作为一款功能强大的科研绘图软件&#xff0c;广泛应用于实验数据处理、结果展示与论文图表制作等领域。然而&#xff0c;在处理多组数据、特别是绘制多条曲线的折线图或点线图时&#xff0c;常常会遇到这样一个困扰&#xff1a;多条…

Java基础 Day19

一、泛型&#xff08;JDK5引入&#xff09; 1、基本概念 在编译阶段约束操作的数据类型&#xff0c;并进行检查 好处&#xff1a;统一数据类型&#xff0c;将运行期的错误提升到了编译期 泛型的默认类型是 Object 2、泛型类 在创建类的时候写上泛型 在创建具体对象的时候…

Gitlab-Runner安装

文章目录 helm方式安装在K8S上参考gitlab CI/CD 文件变量缓存服务器K8S部署 docker镜像mavendocker安装docker buildx minionodehelmkubectlsonar-scanner-cli 问题清除cachehelm执行时无权限 下载镜像失败下载gitlab-runner镜像失败 Gitlab-ci中使用java前端 helm方式安装在K8…

在 Ubuntu linux系统中设置时区的方案

查看时区 在 Ubuntu 系统中&#xff0c;可以通过以下方法查看当前时区设置&#xff1a; 1. 使用 timedatectl 命令&#xff08;推荐&#xff09; 在终端运行以下命令&#xff1a; timedatectl输出示例&#xff1a; Local time: Sun 2025-05-25 10:30:00 CST Universal t…

YOLOv8模型剪枝笔记(DepGraph和Network Slimming网络瘦身)

文章目录 一、DepGraph剪枝(1)项目准备1)剪枝基础知识2)DepGraph剪枝论文解读12)DepGraph剪枝论文解读23)YOLO目标检测系列发展史4)YOLO网络架构(2)项目实战(YOLOv8应用DepGraph剪枝+finetune)1)安装软件环境(基础环境、Pytorch、YOLOv8)Windows1)安装软件环境(…

MySQL:11_事务

事务 一.CURD不加控制&#xff0c;会有什么问题&#xff1f; 二.什么是事务&#xff1f; 事务就是一组DML语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;这一组DML语句要么全部成功&#xff0c;要么全部失败&#xff0c;是一个整体。MySQL提供一种机制&#xf…

【notepad++如何设置成中文界面呢?】

“Notepad”是一款非常强大的文本编辑软件&#xff0c;将其界面设置成中文的方法如下&#xff1a; 一、工具&#xff0f;原料&#xff1a; 华为 Matebook 15、Windows 10、Notepad 8.4.6。 二 、具体步骤&#xff1a; 1、找到任意一个文本文件&#xff0c;比如 txt 格式的文…

职坐标嵌入式MCU/DSP与RTOS开发精讲

嵌入式系统开发作为现代智能设备与工业控制的核心技术领域&#xff0c;其架构设计与实现逻辑直接影响系统性能与可靠性。本课程以嵌入式系统架构为切入点&#xff0c;系统化梳理从硬件选型到软件调度的全链路知识体系&#xff0c;重点聚焦微控制器&#xff08;MCU&#xff09;与…

双深度Q网络(Double DQN)基础解析与python实例:训练稳定倒立摆

目录 1. 前言 2. Double DQN的核心思想 3. Double DQN 实例&#xff1a;倒立摆 4. Double DQN的关键改进点 5. 双重网络更新策略 6. 总结 1. 前言 在强化学习领域&#xff0c;深度Q网络&#xff08;DQN&#xff09;开启了利用深度学习解决复杂决策问题的新篇章。然而&am…

使用KubeKey快速部署k8s v1.31.8集群

实战环境涉及软件版本信息&#xff1a; 使用kubekey部署k8s 1. 操作系统基础配置 设置主机名、DNS解析、时钟同步、防火墙关闭、ssh免密登录等等系统基本设置 dnf install -y curl socat conntrack ebtables ipset ipvsadm 2. 安装部署 K8s 2.1 下载 KubeKey ###地址 https…

SQL:窗口函数(Window Functions)

目录 什么是窗口函数&#xff1f; 基本语法结构 为什么要用窗口函数&#xff1f; 常见的窗口函数分类 1️⃣ 排名类函数 2️⃣ 聚合类函数&#xff08;不影响原始行&#xff09; 3️⃣ 值访问函数 窗口范围说明&#xff08;ROWS / RANGE&#xff09; 什么是窗口函数&a…

相机内参 opencv

视场角定相机内参 import numpy as np import cv2 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Ddef calculate_camera_intrinsics(image_width640, image_height480, fov55, is_horizontalTrue):"""计算相机内参矩阵参数:image_w…

MATLAB 各个工具箱 功能说明

​ 想必大家在安装MATLAB时&#xff0c;或多或少会疑惑应该安装哪些工具箱。笔者遇到了两种情况——只安装了MATLAB主程序&#xff0c;老师让用MATLAB的时候却发现没有安装对应安装包&#xff1b;第二次安装学聪明了&#xff0c;全选安装&#xff0c;嗯……占用了20多个G。 ​…

学习日记-day14-5.23

完成目标&#xff1a; 学习java下半段课程 知识点&#xff1a; 1.多态转型 知识点 核心内容 重点 多态转型 向上转型&#xff08;父类引用指向子类对象&#xff09; 与向下转型&#xff08;强制类型转换&#xff09;的机制与区别 向上转型自动完成&#xff0c;向下转型需…

【编程语言】【Java】一篇文章学习java,复习完善知识体系

第一章 Java基础 1.1 变量与数据类型 1.1.1 基本数据类型 1.1.1.1 整数类型&#xff08;byte、short、int、long&#xff09; 在 Java 中&#xff0c;整数类型用于表示没有小数部分的数字&#xff0c;不同的整数类型有不同的取值范围和占用的存储空间&#xff1a; byte&am…

汇量科技前端面试题及参考答案

数组去重的方法有哪些&#xff1f; 在 JavaScript 中&#xff0c;数组去重是一个常见的操作&#xff0c;有多种方法可以实现这一目标。每种方法都有其适用场景和性能特点&#xff0c;下面将详细介绍几种主要的去重方法。 使用 Set 数据结构 Set 是 ES6 引入的一种新数据结构&a…

Git实战演练,模拟日常使用,快速掌握命令

01 引言 上一期借助Idea&#xff0c;完成了Git仓库的建立、配置、代码提交等操作&#xff0c;初步入门了Git的使用。然而日常开发中经常面临各种各样的问题&#xff0c;入门级的命令远远不够使用。 这一期&#xff0c;我们将展开介绍Git的日常处理命令&#xff0c;解决日常问…

wordpress主题开发中常用的12个模板文件

在WordPress主题开发中&#xff0c;有多种常用的模板文件&#xff0c;它们负责控制网站不同部分的显示内容和布局&#xff0c;以下是一些常见的模板文件&#xff1a; 1.index.php 这是WordPress主题的核心模板文件。当没有其他更具体的模板文件匹配当前页面时&#xff0c;Wor…

数据库blog5_数据库软件架构介绍(以Mysql为例)

&#x1f33f;软件的架构 &#x1f342;分类 软件架构总结为两种主要类型&#xff1a;一体式架构和分布式架构 ● 一体化架构 一体式架构是一种将所有功能集成到一个单一的、不可分割的应用程序中的架构模式。这种架构通常是一个大型的、复杂的单一应用程序&#xff0c;包含所…

离线服务器算法部署环境配置

本文将详细记录我如何为一台全新的离线服务器配置必要的运行环境&#xff0c;包括基础编译工具、NVIDIA显卡驱动以及NVIDIA-Docker&#xff0c;以便顺利部署深度学习算法。 前提条件&#xff1a; 目标离线服务器已安装操作系统&#xff08;本文以Ubuntu 18.04为例&#xff09…