Golang模板执行返回index.html内容而非预期页面问题排查
Go Web应用模板渲染显示异常排查
我开发Go Web应用时,访问localhost:3000,页面显示的是index.html的内容但不符合预期。将indexHandler中的tpl.Execute(w, nil)替换为w.Write([]byte("<h1>HELLO W</h1>"))时能正常显示,说明服务器本身无问题,怀疑模板执行逻辑出错。
我的main.go代码如下:
package main import ( "html/template" "net/http" "os" ) var tpl = template.Must(template.ParseFiles("index.html")) func indexHandler(w http.ResponseWriter, r *http.Request) { tpl.Execute(w, nil) } func main() { port := os.Getenv("PORT") if port == "" { port = "3000" } mux := http.NewServeMux() mux.HandleFunc("/", indexHandler) http.ListenAndServe(":"+port, mux) }
index.html代码如下:
<DOCTYPE> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Orders</title> <!-- <link rel="stylesheet" href="/assets/style.css"> --> </head> <body> <h1>Orders12</h1> </body> </html>
使用Go版本:go1.22.4 windows/amd64
问题原因及解决办法
你的模板执行逻辑本身没有错误,问题出在以下两点:
DOCTYPE声明错误
你写的<DOCTYPE>不符合HTML标准,正确的写法应为<!DOCTYPE html>。错误的声明会让浏览器进入怪异模式,页面渲染行为偏离标准,导致显示效果不符合预期。修改后浏览器会以标准模式渲染页面,恢复正常显示。模板未实时刷新
如果修改index.html后没有重启Go服务,程序会使用启动时加载的旧模板内容。开发时可以重启服务,或者使用fresh这类工具实现模板热加载,修改文件后自动重启服务加载新内容。
内容的提问来源于stack exchange,提问作者zSakhalin
相关产品推荐
相关产品推荐

