小艾同学

go 使用模版生产真静态html

go代码

package main

import (
    "fmt"
    "log"
    "os"
    "path/filepath"
    "text/template"
)

var (
    html_out_path = "./views/template/" //生成的HTML保存目录
    template_path = "./views/"          //模板HTML目录
)

func clearOldHtml() {
    //删除垃圾文件
    err := os.RemoveAll(html_out_path)
    if err != nil {
        log.Panicln(err.Error())
    }
    //新建目录
    err = os.MkdirAll(html_out_path, os.ModePerm)
    if err != nil {
        log.Panicln(err.Error())
    }
}

func generateHtml() {
    //生成内容页面
    pathHtml := filepath.Join(template_path, "index.tpl")
    html_tmp, err := template.ParseFiles(pathHtml)
    if err != nil {
        log.Panicln(err.Error())
    }
    data := make(map[string]interface{})
    filename := filepath.Join(html_out_path, fmt.Sprintf("index.html"))
    data["Title"] = "这里是标题"
    data["Content"] = "这里是文件内容不符"
    generateStaticHtml(html_tmp, filename, data)
}
func generateStaticHtml(tmplate *template.Template, filename string, data map[string]interface{}) {
    if IsExist(filename) {
        err := os.Remove(filename)
        if err != nil {
            log.Panicln(err.Error())
        }
    }
    file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
    if err != nil {
        log.Panicln(err.Error())
    }
    defer file.Close()
    _ = tmplate.Execute(file, data)
}

/*
判断文件是否存在
*/
func IsExist(file string) bool {
    _, err := os.Stat(file)
    return err == nil || os.IsExist(err)
}

func main() {
    //重新生成前要先删除
    clearOldHtml()
    //生成静态HTML
    generateHtml()
}

 模板部分:

index.tpl

<!DOCTYPE html>
<html>
    <title>{{.Title}}</title>
<body>
    <div><p>{{.Content}}</p></div>
</body>
</html>

运行后生成的 index.html

<!DOCTYPE html>
<html>
    <title>这里是标题</title>
<body>
    <div><p>这里是文件内容不符</p></div>
</body>
</html>