Go语言之自定义模板,引用多个模板html文件嵌套使用

简介: Go语言之自定义模板,引用多个模板html文件嵌套使用

制作流程:

1、同样是先定义一个处理接口/tmpl,当访问到http://ip:9090/tmpl时,会处理ti函数

1675180779051.jpg

2、定义t1函数,这个函数解析了两个模板1.tmpl 2.tmpl,这里需要注意的是第一个模板是父模板,其中包含了第二个模板,所以第一个模板必须先写

1675180797438.jpg

3、1.tmpl使用define函数生成了一个内部模板,而2.tmpl是与1.tmpl同一目录级别的文件。这里只是引申一下define知识点

目录结构:

main.go
1.tmpl
2.tmpl
p6.tmpl

main.go内容

package main
import (
  "fmt"
  "html/template"
  "net/http"
)
func f1(w http.ResponseWriter, r *http.Request) {
  //嵌套一个函数,要么赋值一个,要么第二个值必须是error
  k := func(name string) (string, error) {
    return name + "Gin框架", nil
  }
  //定义模板
  //在p6.tmpl编辑
  //解析模板
  t := template.New("p6.tmpl") //定义一个新的模板名称为p6.tmpl
  t.Funcs(template.FuncMap{    //固定函数格式
    "kua": k, //自定义“kua”必须与同级目录p6.tmpl文件引用的一致
  })
  _, err := t.ParseFiles("./p6.tmpl") //使用ctrl得知,这里需要两个返回值,所以赋值两个
  if err != nil {                     //错误处理
    fmt.Printf("parse template failed,err%v", err)
    return
  }
  name := "Go语言" //声明值
  //渲染模板
  t.Execute(w, name) //w代表写入,name对应同级目录p6.tmpl文件中的点.
}
func t1(w http.ResponseWriter, r *http.Request) {
  //定义模板
  //解析模板
  t, err := template.ParseFiles("./1.tmpl", "./2.tmpl")
  if err != nil {
    fmt.Printf("parse template failed,err%v", err)
    return
  }
  //渲染模板
  name := "GO语言嵌套模板使用"
  t.Execute(w, name)
}
func main() {
  http.HandleFunc("/", f1) //当请求到/根目录时,处理f1函数
  http.HandleFunc("/tmpl", t1)
  err := http.ListenAndServe(":9000", nil) //监听9000端口号
  if err != nil {                          //错误处理
    fmt.Println("HTTP server start failed, err:%v", err)
    return
  }
}

1.tmpl内容

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>自定义嵌套模板函数</title>
</head>
<body>
{{/*template 引用模板文件*/}}
{{template "2.tmpl"}}
{{/*hr代表中横线*/}}
<hr>
{{template "11.tmpl"}}
<hr>
{{/*.代表go代码中的name会传输进来*/}}
{{ . }}
</body>
</html>
{{/*define自定义内部模板*/}}
{{define "11.tmpl"}}
<ol>
    <li>吃饭</li>
    <li>睡觉</li>
    <li>打豆豆</li>
</ol>
{{end}}

2.tmpl内容

<ul>
    <li>吃饭</li>
    <li>睡觉</li>
    <li>打豆豆</li>
</ul>

p6.tmpl内容

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>自定义模板函数</title>
</head>
<body>
{{ kua . }}
</body>
</html>

运行程序:

go run main.go

浏览器访问:

http://ip:9000/tmpl

1675180886076.jpg

相关文章
|
9月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
1406 162
|
8月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
240 2
|
11月前
|
数据采集 JSON 自然语言处理
Go语言实战案例-统计文件中每个字母出现频率
《Go语言100个实战案例》中的“文件与IO操作篇 - 案例19”教你如何统计文本文件中每个英文字母的出现频率。通过实战练习,掌握文件读取、字符处理、map统计等基础技能,适合Go语言初学者提升编程能力。
|
11月前
|
数据采集 Go
Go语言实战案例-批量重命名文件
《Go语言100个实战案例》中的“文件与IO操作篇 - 案例17:批量重命名文件”,适合初学者学习使用 Go 操作文件系统,实现文件批量重命名功能,包括添加前缀、后缀或编号等。
|
11月前
|
JSON 缓存 Go
Go语言实战案例-向文件写入内容
本案例讲解如何使用 Go 语言向文件写入内容,涵盖覆盖写入与追加写入两种模式,适用于日志记录、报告生成等场景。涉及 `os.WriteFile`、`os.OpenFile` 等核心函数,并演示如何处理文件权限与编码问题。
|
12月前
|
XML JSON Go
Go语言中的文件与IO:JSON、CSV、XML处理
本文介绍了 Go 语言中对 JSON、CSV 和 XML 三种常见数据格式的处理方法。通过标准库 `encoding/json`、`encoding/csv` 和 `encoding/xml`,可以实现结构体与数据格式之间的序列化与反序列化。JSON 适合 Web API 和前后端通信,因其清晰易读;CSV 适用于表格数据和轻量级交换;XML 则支持复杂嵌套结构,常用于配置文件和 SOAP 协议。文中提供代码示例,涵盖基本使用、嵌套结构处理及实战建议,帮助开发者高效操作这些格式。
|
12月前
|
Unix Go
Go语言中的文件与IO:文件读写
本文介绍了 Go 语言中文件操作的基础方法,涵盖打开与关闭文件、读取和写入文件内容、追加写入以及复制文件等功能。通过 `os`、`bufio` 和 `io` 等标准库包,提供了高效且灵活的实现方式,如使用 `os.ReadFile` 读取整个文件、`bufio.Scanner` 逐行读取、`os.Create` 创建文件以及 `io.Copy` 复制文件内容。同时强调了错误处理的重要性,例如使用 `defer` 确保文件关闭,并推荐注意文件权限设置(如 UNIX 系统中的 `0644`)。最后以表格形式总结了常用操作及其推荐方法,便于快速查阅和应用。
|
12月前
|
Go 数据处理
Go语言中的文件与IO:bufio 和 scanner
Go 标准库中的 `bufio` 包高效读写功能,适用于文件和数据处理。`bufio.Reader` 支持按行或分隔符读取,`bufio.Writer` 提供高性能写入并需调用 `Flush()` 确保数据写入。`bufio.Scanner` 是处理文本文件(如日志、配置)的利器,可按行、单词等分割内容。本文详解其用法,并给出实践建议,如统计字符数、模拟 `tail -f` 和词频分析等。
|
11月前
|
Go 开发工具 git
Go语言实战案例-遍历目录下所有文件
本案例讲解如何使用 Go 语言递归遍历目录及其子目录中的所有文件。通过 `filepath.WalkDir` 函数实现目录遍历,涵盖文件判断、路径获取和错误处理等知识点,适用于文件管理、批量处理和查找特定类型文件等场景。
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
258 1
利用html2canvas插件自定义生成名片信息并保存图片