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>