Golang 使用模板引擎

Go 语言内置了很多库, 包括一个简易的模板引擎,简单示例:

package main

import (
    "github.com/gorilla/mux"
    "html/template"
    "log"
    "net/http"
)

func HomeHandler(w http.ResponseWriter, r *http.Request) {

    t, _ := template.ParseFiles("templates/home.html", "templates/footer.html")
    err := t.Execute(w, map[string]string{
        "Title": "hello go template",
        "Content": "this is content",
                "Copyright": "TWN39",
    })
    if err != nil {
        panic(err)
    }
}

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/", HomeHandler)
    log.Fatal(http.ListenAndServe(":8080", router))
}

这里的模板放在项目目录下的 templates, 模板文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ .Title }}</title>
</head>
<body>

{{.Content}}

{{template "footer" .}}

</body>
</html>

{{ define "footer"}}
    <footer class="footer">
        <p>this is footer.</p>
        <p>copyright: {{.Copyright}}</p>
    </footer>

{{end}}

可以看到这里不仅能传递变量,而且可以定义区块,分割模板。

注:{{template "footer" .}} 后面还有个点号,表示将变量传递到下一个模板,不然 footer 里面的变量将无法渲染。