golang html/template

template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。

main.go

package main

import (
	"html/template"
	"io/ioutil"
	"os"
	"time"

	"fmt"
)

func main() {
	t := template.New("第一个模板").Delims("[[", "]]") //创建一个模板,设置模板边界
	t, _ = t.Parse("hello,[[.UserName]]\n")       //解析模板文件
	data := map[string]interface{}{"UserName": template.HTML("<script>alert(‘you have been pwned‘)</script>")}
	t.Execute(os.Stdout, data) //执行模板的merger操作,并输出到控制台

	t2 := template.New("新的模板")                         //创建模板
	t2.Funcs(map[string]interface{}{"tihuan": tihuan}) //向模板中注入函数
	bytes, _ := ioutil.ReadFile("test2.html")          //读文件
	template.Must(t2.Parse(string(bytes)))             //将字符串读作模板
	t2.Execute(os.Stdout, map[string]interface{}{"UserName": "你好世界"})
	fmt.Println("\n", t2.Name(), "\n")

	t3, _ := template.ParseFiles("test1.html") //将一个文件读作模板
	t3.Execute(os.Stdout, data)
	fmt.Println(t3.Name(), "\n") //模板名称

	t4, _ := template.ParseGlob("test1.html") //将一个文件读作模板
	t4.Execute(os.Stdout, data)
	fmt.Println(t4.Name())
}

//注入模板的函数
func tihuan(str string) string {
	return str + "-------" + time.Now().Format("2006-01-02")
}

test1.html

<!DOCTYPE html>
<html>
<head>
	<title>template</title>
</head>
<body>
hello {{.UserName}}<br>
</body>
</html>

test2.html

<!DOCTYPE html>
<html>
<head>
	<title>template</title>
</head>
<body>
hello {{.UserName}}<br>
{{tihuan .UserName}}
</body>
</html>
				
时间: 2024-08-04 10:10:20

golang html/template的相关文章

golang 模板(template)的常用基本语法

在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染. 这篇文章不讨论golang后端的模板读取及渲染方法,只讨论模板中嵌入变量,渲染变量.循环等一些基本用法. 变量 在golang渲染template的时候,可以接受一个interface{}类型的变量,我们在模板文件中可以读取变量内的值并渲染到模板里. 有两个常用的传入参数的类型.一个是struct,在模板内可以读取该struct域的

Golang template和junit xml report转html工具

最近刚好有个task是要用Golang把Junit的XML格式report转换成HTML格式,便学习了Golang的template包. 基于template做的那个tool transforming Junit XML report to HTML. Golang提供了对模板的支持(按照文档的说法,是数据驱动模板,data-driven template),分别在"text/template"和"html/template"两个包下.这两个包在api级别是一致的,

全流程开发 GO实战电商网站高并发秒杀系统

获取资源点击这里:全流程开发 GO实战电商网站高并发秒杀系统 第1章 课程介绍[学前须知] 本章对这门课程进行说明,包括:秒杀系统涉及模块的介绍,秒杀核心的知识点的介绍,课程的学习规划等. 1-1 课程介绍试看 第2章 需求整理&系统设计 [明确需求] 本章对秒杀系统整体需求进行梳理,明确系统具体需求,讲解系统原型设计工具的使用,并结合秒杀系统进行整体架构设计. 2-1 需求分析 2-2 系统架构设计 2-3 [总结&扩展]需求整理&系统设计 2-4 [勤于思考,夯实学习成果]阶段

kubernetes实战篇之helm示例yaml文件文件详细介绍

系列目录 前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart. Helm Chart 结构 Chart 目录结构 mychart/ Chart.yaml # Yaml文件,用于描述Chart的基本信息,包括名称版本等 LICENSE # [可选] 协议 README.md # [可选] 当前Chart的介绍 values.yaml # Chart的默认配置文件 requi

[笔记] Golang Template

1.header.tmpl 1 {{define "header"}} 2 <html> 3 <head> 4 <title>演示信息</title> 5 </head> 6 <body> 7 {{end}} 2. content.tmpl 1 {{define "content"}} 2 {{template "header"}} 3 <h1>演示嵌套</

Golang Template source code analysis(Parse)

This blog was written at go 1.3.1 version. We know that we use template thought by followed way: func main() { name := "waynehu" tmpl := template.New("test") tmpl, err := tmpl.Parse("hello {{.}}") if err != nil { panic(err) }

Go - template 常用方法详解 及 注意事项

Go template包下面有两个函数可以创建模板实例 func New(name string) *Template func ParseFiles(filenames ...string) (*Template, error) 首先要说的是每一个template内部可以存储多个模板,而且每个模板必须对应一个独立的名字. 两个的不同点在于: 1.使用 New() 在创建时就为其添加一个模板名称,并且执行 t.Execute() 会默认去寻找该名称进行数据融合: 2.使用 ParseFiles(

Go语言(golang)开源项目大全

转http://www.open-open.com/lib/view/open1396063913278.html内容目录Astronomy构建工具缓存云计算命令行选项解析器命令行工具压缩配置文件解析器控制台用户界面加密数据处理数据结构数据库和存储开发工具分布式/网格计算文档编辑器Encodings and Character SetsGamesGISGo ImplementationsGraphics and AudioGUIs and Widget ToolkitsHardwareLangu

[Golang]Go Packages

----------------------------------------------------------------------------------------------------------- 程序包标准类库 其他程序包     子库     社区标准类库 名称     摘要 存档            tar     tar包实现了对档案的压缩.      zip     zip程序包对读写ZIP文档提供支持. bufio     bufio包实现了输入/输出缓冲.它包含