[TOC]
- HeroHero介绍目录结构代码示例提示
Hero
Hero介绍
Hero是一个方便,快速和强大的go模板引擎,可以预编译html模板以获取代码。
特征
- 高性能。
- 使用方便。
- 强大。 模板扩展和包含支持。
- 文件更改时自动编译。
目录结构
主目录herotemplate
—— template —— index.html —— user.html —— userlist.html —— userlistwriter.html —— main.go
代码示例
main.go
package mainimport ( "bytes" "./template" "github.com/kataras/iris")// $ go get -u github.com/shiyanhui/hero/hero// $ go run main.go// 了解更多 https://github.com/shiyanhui/herofunc main() { app := iris.New() app.Get("/users", func(ctx iris.Context) { ctx.Gzip(true) ctx.ContentType("text/html") var userList = []string{ "Alice", "Bob", "Tom", } //最好使用buffer sync.Pool //Hero(github.com/shiyanhui/hero)为此导出了GetBuffer和PutBuffer // buffer := hero.GetBuffer() // defer hero.PutBuffer(buffer) // buffer := new(bytes.Buffer) // template.UserList(userList, buffer) // ctx.Write(buffer.Bytes()) //使用io.Writer进行自动缓冲管理(hero built-in 缓冲池), // iris context通过其ResponseWriter实现io.Writer //这是标准http.ResponseWriter的增强版本 //但仍然100%兼容,GzipResponseWriter也同样兼容: // _, err := template.UserListToWriter(userList, ctx.GzipResponseWriter()) buffer := new(bytes.Buffer) template.UserList(userList, buffer) _, err := ctx.Write(buffer.Bytes()) if err != nil { ctx.StatusCode(iris.StatusInternalServerError) ctx.WriteString(err.Error()) } }) app.Run(iris.Addr(":8080"))}
/template/index.html
<!DOCTYPE html><html> <head> <meta charset="utf-8"> </head> <body> <%@ body { %> <% } %> </body></html>
文件名称template/user.html
<li> <%= user %></li>
文件名称template/userlist.html
<%: func UserList(userList []string, buffer *bytes.Buffer) %><%~ "index.html" %><%@ body { %> <% for _, user := range userList { %> <ul> <%+ "user.html" %> </ul> <% } %><% } %>
/template/userlistwriter.html
<%: func UserListToWriter(userList []string, w io.Writer) (int, error)%><%~ "index.html" %><%@ body { %> <% for _, user := range userList { %> <ul> <%+ "user.html" %> </ul> <% } %><% } %>
提示
- 引入相应的包,建好所有所有文件
- 执行相应的命令,所有的html文件都会生成相应的.go文件
- 传送们
