`

go语言html/template解析问题

阅读更多

最近使用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
}

 

分享到:
评论

相关推荐

    go依赖包golang.org/x下的所有源码

    1. **text/**:这个包主要关注文本处理,包括`text/tabwriter`用于格式化制表符分隔的文本,以及`text/template`和`text/template/parse`,它们是用于生成动态HTML或其他文本的模板引擎,是Go语言中构建Web应用的...

    Go html/template 模板的使用实例详解

    在Go语言中,`html/template`包提供了一种强大的方式来处理HTML文档和其他格式的模板文件。它不仅支持基础的文本替换,还支持复杂的逻辑处理如条件判断、循环等。下面将详细介绍如何使用`html/template`包,并通过...

    go语言html模板渲染

    Go语言,也称为Golang,是由Google开发的一种静态类型的、编译型的、垃圾回收的、并发型且具有C风格语法的编程语言。在Web开发领域,Go语言因其高效的性能和简洁的语法而受到欢迎。其中,HTML模板渲染是Go语言进行...

    Go-Golang模板语言和FuncMap功能的简单演示

    `text/template`和`html/template`包是Go语言的标准库,它们都提供了一种声明式的编程方式来生成字符串输出,主要区别在于`html/template`包会自动转义HTML实体,以防止XSS攻击。这两个包的工作原理相似,都是通过...

    Go-Gotemplate-Go编程语言最好的方法来处理不同类型的模板引擎和解析器

    在Go语言中,模板主要用于生成动态HTML或其他格式的文本输出,尤其是在Web开发中。 Go模板的使用主要涉及以下几个核心概念: 1. **模板定义**:模板定义是通过`template.New`函数创建的,这个函数接收一个字符串...

    Go语言制作Markdown预览器.zip

    Go语言拥有强大的标准库,其中`text/template`和`html/template`用于生成HTML,但它们并不直接支持Markdown。因此,我们需要使用第三方库,如`goldmark`或`blackfriday`,它们可以将Markdown文本转换为HTML。例如,...

    漂亮的Go语言通用后台管理系统源码.zip

    《Go语言通用后台管理系统源码解析》 Go语言,又称为Golang,是Google在2009年推出的一种开源编程语言,设计时注重简洁、高效和可移植性,尤其适用于构建高性能网络服务和后台管理系统。本篇文章将深入探讨一个基于...

    Go-使用golang写的静态博客生成器

    Go语言,也称为Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的、C风格的编程语言。它以其简洁的语法、高效的性能和内置的并发支持而受到开发者喜爱。在本场景中,"Go-使用golang写的静态...

    采用`Go`语言和`Markdown`实现的一个简易博客系统.zip

    这是一个使用Go语言(Golang)开发的简易博客系统,它采用了Markdown语法来撰写和展示文章内容。Markdown是一种轻量级的标记语言,使得用户能够用易读易写的纯文本格式编写文档,然后转换成结构化的HTML(超文本标记...

    go语言template用法实例

    Go语言中的template包是一个非常实用的工具,用于生成文本输出。本文将会介绍Go语言中template的基本用法,并通过实例来分析template的使用技巧。 首先,我们来了解一下什么是template。在Go语言中,template可以...

    基于go语言实现的WEB版数据库管理工具源代码

    5. **模板引擎**:Go语言标准库中的html/template或第三方如Ace、Gin-Html等模板引擎,用于生成动态HTML页面。 6. **数据库操作**:包括SQL查询的编写、事务处理、连接池管理等,需要熟悉SQL语法和数据库管理系统的...

    go语言搭建简易投票功能

    在本文中,我们将深入探讨如何使用Go语言(Golang)来搭建一个简易的投票功能。Go语言是由Google开发的一种静态类型的、编译型的、并发型的语言,它以其高效的性能和简洁的语法深受开发者喜爱。在搭建投票系统时,...

    Go Web 基础【2017】02 基础模板用法

    `html/template`包是Go语言标准库的一部分,主要用于生成安全的HTML输出,防止跨站脚本(XSS)攻击。它提供了一种声明式的方法来描述HTML结构,使得程序逻辑与HTML内容分离,提高了代码的可读性和可维护性。 首先,...

    Go-Go语言中的一个简单的markdown预览工具

    在Go语言中,开发一个Markdown预览工具是一个实用且有趣的项目。Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML(超文本标记语言)文档。Go语言由于其简洁、...

    go语言web开发

    Go语言,也称为Golang,是由Google设计的一种静态类型的编程语言。它以其简洁的语法、高效的性能以及强大的并发处理能力而著称,在网络编程领域得到了广泛的应用。本书《用Go语言进行Web开发》旨在介绍如何使用Go...

    Go-Mustache模板语言在Go中的一个实现

    Go语言,作为一种高效且简洁的编程语言,广泛用于构建服务器端应用、网络服务以及各种工具。在处理动态数据展示时,模板引擎起到了至关重要的作用,它允许开发者将数据与显示结构分离,使得代码更加整洁,易于维护。...

    html模板的巧妙使用2

    "HTML模板的巧妙使用2"这一主题着重于利用`text/template`来实现动态生成代码,这在Go语言中尤其常见。`text/template`是Go的标准库之一,用于生成文本输出,它对于构建动态网页或生成其他格式的文档非常有用。 ...

    golang开发web应用示例

    在本示例中,我们将探讨如何使用Go语言(也称为Golang)开发Web应用程序。Go是一种静态类型的、编译型的、并发的、垃圾回收的编程语言,由Google设计,特别适合构建高性能的网络服务和分布式系统。"golang开发web...

    Go Template学习笔记

    Go 模板是 Go 语言标准库中的一个重要组成部分,它用于生成动态内容,尤其是在 Web 开发中用于渲染 HTML 页面。本文将深入探讨 Go 模板的使用方法和关键概念。 首先,我们来看一个简单的示例,这个示例展示了如何...

Global site tag (gtag.js) - Google Analytics