【问题标题】:Why views are same when I run main.go again为什么当我再次运行 main.go 时视图相同
【发布时间】:2015-06-28 12:56:59
【问题描述】:

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时,为什么视图总是一样?(我已经清理了浏览器的缓存)例如,将“欢迎”更改为“www”,浏览器确实发生了变化.

然后我杀掉main.go的进程,再次运行,视图变了。

有没有更好的方法来停止 main.go 而不是终止这个进度?

【问题讨论】:

  • 如何为您的 html 提供服务?静态文件还是模板?
  • @inf 我使用模板
  • @inf 我认为这与提供 html 的方式无关。因为即使我更改了html的内容,浏览器中的视图也不会改变。(例如

    test1

    test2

    ,在浏览器中是“test1”)

  • 没有任何代码很难提供明确的答案,但很有可能您在启动时只解析一次模板。这很好——解析每个请求真的很慢——但解释了为什么在应用重新启动之前看不到更新的模板。 github.com/unrolled/render 可以通过一个标志来帮助这一点,以便仅在开发期间重新加载模板。
  • @elithrar 我已经说清楚了:)

标签: web go browser-cache


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多