Hero
- 高性能。
- 使用方便。
- 强大。 模板扩展和包含支持。
- 文件更改时自动编译。
package main
import (
"bytes"
"./template"
"github.com/kataras/iris"
)
// $ go get -u github.com/shiyanhui/hero/hero
// $ go run main.go
// 了解更多 https://github.com/shiyanhui/hero
func main() {
app := iris.New()
app.Get("/users", func(ctx iris.Context) {
ctx.ContentType("text/html")
var userList = []string{
"Alice",
"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)
_, err := ctx.Write(buffer.Bytes())
if err != nil {
ctx.StatusCode(iris.StatusInternalServerError)
}
})
app.Run(iris.Addr(":8080"))
}
<li>
<%= user %>
</li>
<%: func UserListToWriter(userList []string, w io.Writer) (int, error)%>
<%~ "index.html" %>
<%@ body { %>
<% for _, user := range userList { %>
<ul>
<%+ "user.html" %>
</ul>
<% } %>
<% } %>