最近使用go语言html/template包进行一些静态化工作,发现template对于小于号(左尖括号<)不能正确处理,反复研究,没有弄清楚怎么回事,后来变通了一下,先对模板进行EscapeString编码,格式化以后,再进行UnescapeString编码,问题得到解决;
但还是没弄清楚template为什么对单独的小于号(左尖括号<)无法正确格式化,但发现如果左尖括号的右边有一个或多个右尖括号(>),则能正确解析格式化,而template源码包读起来很费解,最终没有弄明白,希望知道的同学能告知原因;
贴上我的解决方案,以供参考
package mytemplate import ( "bytes" "html" "html/template" "os" "strconv" "time" ) type MyTemplate struct { LeftDelim string RightDelim string Escape bool } func NewMwTemplate(left, right string, escape bool) *MwTemplate { return &MwTemplate{ left, right, escape, } } //将模板字符串格式化 //@param tplStr 模板字符串 //@param tplObj 模板数据 func (this *MyTemplate) TplToString(tplStr string, tplObj interface{}) (result string, err error) { //如果需要编码 if this.Escape { tplStr = html.EscapeString(tplStr) } t := template.New(strconv.FormatInt(time.Now().Unix(), 10)) if err != nil { return } //覆盖模板左右分隔符 if this.LeftDelim != "" && this.RightDelim != "" { t.Delims(this.LeftDelim, this.RightDelim) } t, err = t.Parse(tplStr) if err != nil { return } b := new(bytes.Buffer) err = t.Execute(b, tplObj) if err != nil { return } result = string(b.String()) if this.Escape { result = html.UnescapeString(result) } return } //TplToFile 将模板字符串格式化以后,写入文件 //@param tplStr 模板字符串 //@param tplPath 保存的文件 //@param tplObj 模板数据 func (this *MyTemplate) TplToFile(tplStr, tplPath string, tplObj interface{}) (err error) { result, err := this.TplToString(tplStr, tplObj) if err != nil { return } fout, err := os.Create(tplPath) if err != nil { return } defer fout.Close() _, err = fout.WriteString(result) return }
相关推荐
1. **text/**:这个包主要关注文本处理,包括`text/tabwriter`用于格式化制表符分隔的文本,以及`text/template`和`text/template/parse`,它们是用于生成动态HTML或其他文本的模板引擎,是Go语言中构建Web应用的...
在Go语言中,`html/template`包提供了一种强大的方式来处理HTML文档和其他格式的模板文件。它不仅支持基础的文本替换,还支持复杂的逻辑处理如条件判断、循环等。下面将详细介绍如何使用`html/template`包,并通过...
Go语言,也称为Golang,是由Google开发的一种静态类型的、编译型的、垃圾回收的、并发型且具有C风格语法的编程语言。在Web开发领域,Go语言因其高效的性能和简洁的语法而受到欢迎。其中,HTML模板渲染是Go语言进行...
韓膠使用必读gtpl 是 golang 的 HTML 模板引擎gtpl 是一个 go 语言模板引擎,它能够以极快的速度进行模板语法分析。相比 go 语言官方库 html/template,gtpl 的语法具有练习、灵活、轻松的特点。gtpl语言的最终目的...
`text/template`和`html/template`包是Go语言的标准库,它们都提供了一种声明式的编程方式来生成字符串输出,主要区别在于`html/template`包会自动转义HTML实体,以防止XSS攻击。这两个包的工作原理相似,都是通过...
在Go语言中,模板主要用于生成动态HTML或其他格式的文本输出,尤其是在Web开发中。 Go模板的使用主要涉及以下几个核心概念: 1. **模板定义**:模板定义是通过`template.New`函数创建的,这个函数接收一个字符串...
Go语言拥有强大的标准库,其中`text/template`和`html/template`用于生成HTML,但它们并不直接支持Markdown。因此,我们需要使用第三方库,如`goldmark`或`blackfriday`,它们可以将Markdown文本转换为HTML。例如,...
《Go语言通用后台管理系统源码解析》 Go语言,又称为Golang,是Google在2009年推出的一种开源编程语言,设计时注重简洁、高效和可移植性,尤其适用于构建高性能网络服务和后台管理系统。本篇文章将深入探讨一个基于...
Go语言,也称为Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的、C风格的编程语言。它以其简洁的语法、高效的性能和内置的并发支持而受到开发者喜爱。在本场景中,"Go-使用golang写的静态...
这是一个使用Go语言(Golang)开发的简易博客系统,它采用了Markdown语法来撰写和展示文章内容。Markdown是一种轻量级的标记语言,使得用户能够用易读易写的纯文本格式编写文档,然后转换成结构化的HTML(超文本标记...
Go语言中的template包是一个非常实用的工具,用于生成文本输出。本文将会介绍Go语言中template的基本用法,并通过实例来分析template的使用技巧。 首先,我们来了解一下什么是template。在Go语言中,template可以...
5. **模板引擎**:Go语言标准库中的html/template或第三方如Ace、Gin-Html等模板引擎,用于生成动态HTML页面。 6. **数据库操作**:包括SQL查询的编写、事务处理、连接池管理等,需要熟悉SQL语法和数据库管理系统的...
在本文中,我们将深入探讨如何使用Go语言(Golang)来搭建一个简易的投票功能。Go语言是由Google开发的一种静态类型的、编译型的、并发型的语言,它以其高效的性能和简洁的语法深受开发者喜爱。在搭建投票系统时,...
`html/template`包是Go语言标准库的一部分,主要用于生成安全的HTML输出,防止跨站脚本(XSS)攻击。它提供了一种声明式的方法来描述HTML结构,使得程序逻辑与HTML内容分离,提高了代码的可读性和可维护性。 首先,...
在Go语言中,开发一个Markdown预览工具是一个实用且有趣的项目。Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML(超文本标记语言)文档。Go语言由于其简洁、...
Go语言,也称为Golang,是由Google设计的一种静态类型的编程语言。它以其简洁的语法、高效的性能以及强大的并发处理能力而著称,在网络编程领域得到了广泛的应用。本书《用Go语言进行Web开发》旨在介绍如何使用Go...
Go语言,作为一种高效且简洁的编程语言,广泛用于构建服务器端应用、网络服务以及各种工具。在处理动态数据展示时,模板引擎起到了至关重要的作用,它允许开发者将数据与显示结构分离,使得代码更加整洁,易于维护。...
"HTML模板的巧妙使用2"这一主题着重于利用`text/template`来实现动态生成代码,这在Go语言中尤其常见。`text/template`是Go的标准库之一,用于生成文本输出,它对于构建动态网页或生成其他格式的文档非常有用。 ...
在本示例中,我们将探讨如何使用Go语言(也称为Golang)开发Web应用程序。Go是一种静态类型的、编译型的、并发的、垃圾回收的编程语言,由Google设计,特别适合构建高性能的网络服务和分布式系统。"golang开发web...