一直觉得 Go 没有一个好用的模板引擎,渲染 HTML 的时候特别痛苦,总有一种有力气却使不出来的感觉。
模板引擎一般有两种实现方式,一种是解析 HTML 语法树,然后根据一定的规则动态的拼接,另外一种是把模板预先生成代码,渲染模板时调用相关的函数即可。
Go 内置的 template 包使用的是第一种方式,不过很多开源项目使用的是第二种方式,比如 quicktemplate 、 gorazor 等。不过这两个可能由于设计的问题,都没有实现模板继承和模板 include ,而且有的语法个人觉得不是太优雅。
所以我想要一个 Go 模板,它具备以下特性:
原生的 Golang 语法
支持模板植入代码
支持模板继承和 include
高性能
语法简单、优雅
自动编译
基于以上,实现了 Hero 模板引擎,用过 nodejs EJS 模板引擎的童鞋应该很容易上手。 hero 目前已经在 [http://bthub.io](http://bthub.io/) 线上使用。