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

Why views are same when I run main.go again

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时,为什么视图总是一样?(我清理了浏览器的缓存)例如,更改"Welcome" 到 "wwww",浏览器确实发生了变化。

然后我把main.go的进度kill掉,再运行它,视图就变了。

是否有更好的方法来停止 main.go 而不是终止此进程?

因为 templates 是一个全局变量,所以您只渲染一次模板。

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