说明:Go内置的模版引擎功能很单一,基本上就是个输出替换工具
如果:希望在模版中实现更多逻辑判断等... 推荐使用三方的引擎

推荐:https://github.com/flosch/pongo2
原因:兼容Django模版,所以更容易学习

模版的使用

// GO
package main

import (
    "html/template"
    "log"
    "net/http"
    "runtime"
)

// 主
func main() {

    // 设置CPU核心数量
    runtime.GOMAXPROCS(runtime.NumCPU())

    // 设置日志的结构
    log.SetFlags(log.Lshortfile | log.Ldate | log.Ltime | log.Lmicroseconds)

    // -------------------------------------------------------- //

    http.Handle("/css/", http.FileServer(http.Dir("template")))

    http.Handle("/js/", http.FileServer(http.Dir("template")))

    http.Handle("/files/", http.FileServer(http.Dir("template")))

    http.Handle("/images/", http.FileServer(http.Dir("template")))

    // -------------------------------------------------------- //

    http.HandleFunc("/", index)

    // -------------------------------------------------------- //

    // 建立监听
    if err := http.ListenAndServe(":8080", nil); err != nil {
        // 踢出错误
        log.Panic(err)
    }

}

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

    // 解析参数
    r.ParseForm()

    // 解析主页面
    t, err := template.ParseFiles("template/default.html")
    if err != nil {
        // 输出错误信息
        http.Error(w, err.Error(), 500)
        return
    }

    // 数据推荐存在MAP中 ...
    data := make(map[string]interface{})

    // String
    data["Name"] = "nljb"
    data["Email"] = "nljb@qq.com"

    // 布尔
    data["True"] = true
    data["False"] = false

    // 整型
    data["Year"] = 35

    // 结构体
    type User struct {
        Name string
        Pass string
    }
    data["User"] = User{Name: "nljb", Pass: "1234"}

    // 列表
    data["List"] = []int{1, 2, 3, 4, 5, 6, 7, 8}

    // 列表结构体
    a := User{Name: "nljb", Pass: "1234"}
    b := User{Name: "jbnl", Pass: "4321"}
    data["Structs"] = []User{a, b}

    // 模版变量
    data["var"] = "hello world !!!"

    data["maps"] = map[string]string{"name": "golang"}

    // 执行
    t.Execute(w, data)

    // 返回
    return

}

    // HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GOLANG</title>
</head>
<body>
Name -> [[.Name]] , Email: [[.Email]]
<br>
True -> [[.True]] , False: [[.False]]
<br>
Year -> [[.Year]]
<br>
[[if .True]]
IF Bool -> true
[[else]]
IF Bool -> flase
[[end]]
<br>
Range List ->
[[range .List]]
[[.]]
[[end]]
<br>
Struct -> [[.User.Name]] , [[.User.Pass]]
<br>
[[with .User]]
With Struct -> [[.Name]] , [[.Pass]]
[[else]]
[[ //* 当 User 为空时会执行这里 *//]]
[[end]]
<br>
Range Struct List ->
[[range .Structs]]
[[.Name]] - [[.Pass]] ;
[[end]]
<br>
[[$xxx := .var]]
Var -> [[$xxx]]
<br>
Printf -> [[.var | printf "%s"]]
<br>
Printf -> [[printf "Nums -> %s %d" (printf "%d %d" 1 2) 3]]
<br>
<!-- index 支持 map, slice, array, string,读取指定类型对应下标的值 -->
Index Map -> [[index .maps "name"]]
<br>
Len -> [[printf "The content length is %d" (.var|len)]]
</body>
</html>