Hero

Hero介绍

Hero是一个方便,快速和强大的go模板引擎,可以预编译html模板以获取代码。

特征

  • 高性能。
  • 使用方便。
  • 强大。 模板扩展和包含支持。
  • 文件更改时自动编译。

目录结构

主目录herotemplate

  1. —— template
  2. —— index.html
  3. —— user.html
  4. —— userlist.html
  5. —— userlistwriter.html
  6. —— main.go

代码示例

main.go

  1. package main
  2. import (
  3. "bytes"
  4. "./template"
  5. "github.com/kataras/iris"
  6. )
  7. // $ go get -u github.com/shiyanhui/hero/hero
  8. // $ go run main.go
  9. // 了解更多 https://github.com/shiyanhui/hero
  10. func main() {
  11. app := iris.New()
  12. app.Get("/users", func(ctx iris.Context) {
  13. ctx.Gzip(true)
  14. ctx.ContentType("text/html")
  15. var userList = []string{
  16. "Alice",
  17. "Bob",
  18. "Tom",
  19. }
  20. //最好使用buffer sync.Pool
  21. //Hero(github.com/shiyanhui/hero)为此导出了GetBuffer和PutBuffer
  22. // buffer := hero.GetBuffer()
  23. // defer hero.PutBuffer(buffer)
  24. // buffer := new(bytes.Buffer)
  25. // template.UserList(userList, buffer)
  26. // ctx.Write(buffer.Bytes())
  27. //使用io.Writer进行自动缓冲管理(hero built-in 缓冲池),
  28. // iris context通过其ResponseWriter实现io.Writer
  29. //这是标准http.ResponseWriter的增强版本
  30. //但仍然100%兼容,GzipResponseWriter也同样兼容:
  31. // _, err := template.UserListToWriter(userList, ctx.GzipResponseWriter())
  32. buffer := new(bytes.Buffer)
  33. template.UserList(userList, buffer)
  34. _, err := ctx.Write(buffer.Bytes())
  35. if err != nil {
  36. ctx.StatusCode(iris.StatusInternalServerError)
  37. ctx.WriteString(err.Error())
  38. }
  39. })
  40. app.Run(iris.Addr(":8080"))
  41. }

/template/index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. </head>
  6. <body>
  7. <%@ body { %>
  8. <% } %>
  9. </body>
  10. </html>

文件名称template/user.html

  1. <li>
  2. <%= user %>
  3. </li>

文件名称template/userlist.html

  1. <%: func UserList(userList []string, buffer *bytes.Buffer) %>
  2. <%~ "index.html" %>
  3. <%@ body { %>
  4. <% for _, user := range userList { %>
  5. <ul>
  6. <%+ "user.html" %>
  7. </ul>
  8. <% } %>
  9. <% } %>

/template/userlistwriter.html

  1. <%: func UserListToWriter(userList []string, w io.Writer) (int, error)%>
  2. <%~ "index.html" %>
  3. <%@ body { %>
  4. <% for _, user := range userList { %>
  5. <ul>
  6. <%+ "user.html" %>
  7. </ul>
  8. <% } %>
  9. <% } %>

提示

  • 引入相应的包,建好所有所有文件
  • 执行相应的命令,所有的html文件都会生成相应的.go文件
  • 传送们