我确定这只是我正在做的愚蠢的事情,但是我是Go的新手,所以不确定这里发生了什么。我有以下基本设置。
requestHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t := template.New("test") t, _ := template.ParseFiles("base.html") t.Execute(w, "") }) server := &http.Server{ Addr: ":9999", Handler: requestHandler, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, MaxHeaderBytes: 1 << 20, } log.Fatal(server.ListenAndServe())
base.html的内容如下:
<DOCTYPE html> <html> <body> base.html </body> </html>
当我运行服务器并加载页面时,我看到模板内的HTML是逐字的-而不是解释后的版本。事实证明,模板被包装在 预 标签中,随后被包装在新文档中。
发生什么了?为什么默认情况下go会将其视为纯文本而不是将其作为html发送,以便浏览器可以正确呈现它?当然,这肯定是一个简单的误解,但搜索没有任何结果。有想法吗?
您需要添加带有Content-Type的标题
w.Header().Set("Content-Type", "text/html")