当我再次运行main.go时为什么视图相同

时间:2015-06-28 12:57:00

标签: web go browser-cache

main.go

package main
import (
    "html/template"
    "net/http"
)
var templates = template.Must(template.ParseGlob("./templates/*"))

    func viewHandler(w http.ResponseWriter, r *http.Request) {
    err := templates.ExecuteTemplate(w, "indexPage", nil)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
}

func main() {
    http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
    http.HandleFunc("/index", viewHandler)
    http.ListenAndServe(":8090", nil)
}

的index.html

{{define "indexPage"}}
<html>
{{template "header"}}
<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <div class="navbar-header">
                <a class="navbar-brand" href="#">Welcome to TDT Project</a>
            </div>
        </div>
    </nav>

    <div class="btn-group-vertical">
        <a href="#" class="btn btn-default">Button</a>
        <a href="#" class="btn btn-default">Button</a>
    </div>
</body>
</html>
{{end}}

另一个html文件是header.html并且是正确的。

当我更改html并再次运行main.go时,为什么视图总是一样的?(我已经清理了浏览器的缓存)例如,更改&#34;欢迎&#34;对于&#34; wwww&#34;,浏览器确实发生了变化。

然后我杀死了main.go的进度并再次运行它,视图被更改了。

有没有更好的方法来阻止main.go而不是取消这一进展?

1 个答案:

答案 0 :(得分:0)

由于templates是全局变量,因此只渲染模板一次。

每次可以将渲染移动到函数时重新渲染模板。然而这对性能不利,因为渲染非常昂贵,但在开发过程中它是可以的。作为替代方案,您可以使用@elithrar提出的内容。另一种方法是使用gin并修改它以扫描html文件而不仅仅是文件。