GoLang中的HTML部分

 

问题描述:

我刚开始使用Go,我想用它创建一个Web应用程序。我现在要尝试的是以handlebarsjs风格使用模板。我想将页眉和页脚从主页中拉出来,以便可以将它们插入每个网页中。

我当前的设置应该解析主页,页眉和页脚HTML文件并缓存它们。然后,我执行home.html模板,该模板具有用于页面Title,header.html文件和footer.html文件的字段。

每当我搜索相似的页面时,我只会看到javascript页面,因此,如果这是转贴,请告诉我在哪里查找。

define

server.go

package main

import (
    "html/template"
    "io/ioutil"
    "net/http"
    "regexp"
)

var tPath = "./temps/"
var dPath = "./data/"

var templates = template.Must(template.ParseFiles(tPath+"home.html", dPath+"header.html", dPath+"footer.html"))
var validPath = regexp.MustCompile("^/")

func rootHandler(wr http.ResponseWriter, req *http.Request) {
    title := "home"
    headerFile, headErr := ioutil.ReadFile(dPath + "header.html")
    footerFile, footErr := ioutil.ReadFile(dPath + "footer.html")

    if headErr != nil || footErr != nil {
        http.Error(wr, headErr.Error(), http.StatusInternalServerError)
        http.Error(wr, footErr.Error(), http.StatusInternalServerError)
    }

    data := map[string]interface{}{
        "Title":  title,
        "Header": string(headerFile),
        "Footer": string(footerFile),
    }

    err := templates.ExecuteTemplate(wr, title+".html", data)

    if err != nil {
        http.Error(wr, err.Error(), http.StatusInternalServerError)
    }
}

func main() {
    http.HandleFunc("/", rootHandler)
    http.ListenAndServe(":8080", nil)
}

home.html:

{{define "homeHTML"}}
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>{{.Title}} - MySite</title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        {{.Header}}
        <h1>Welcome!</h1>
        {{.Footer}}
    </body>
</html>
{{end}}

Header.html:

{{define "headerHTML"}}
<header>
    <h1>MySite</h1>
    <br>
    <nav>
        <a href="/">Home</a>
    </nav>
</header>
{{end}}

Footer.html

{{define "footerHTML"}}
<footer>
    <p>Thank You for Visiting</p>
</footer>
{{end}}

我正在尝试学习go,并且一开始我想尝试组装一个超级简单的Web服务器来控制iTunes。osascript -e 'Tell Application"iTunes" to playpause'过去,我已经多次 ...