You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言数据库查询网页输出时出现404 Not Found错误的原因排查

HTTP 404错误的含义及你的代码问题分析

404错误的含义

HTTP 404 "Page Not Found" 状态码表示你请求的URL路径在服务器上没有对应的处理程序或资源,服务器无法找到匹配的路由或文件来响应该请求。

你的代码产生404的主要原因

1. 路由匹配的路径问题

你的Go代码中注册的路由是:

http.HandleFunc("/dat/", home_db)

这个路由仅匹配以/dat/结尾的请求(比如http://localhost:8100/dat/),如果你访问的是http://localhost:8100/dat(不带末尾斜杠),Go的标准HTTP库不会自动进行路径重定向,会直接返回404错误。

2. 全局数据库变量未初始化(潜在致命问题)

你定义了全局变量var database *sql.DB,但在main函数中只是创建了db变量,并没有将其赋值给database:

db, err := sql.Open("mysql", "xxxxx:xxxxxx@tcp(xx.xx.xxx.xxx:xx)/xxxxx")

这会导致home_db函数中调用database.Query时触发nil pointer dereference panic,即使路由匹配成功,也会返回500错误而非正常渲染页面。

额外的模板语法错误(非404原因,但需修复)

你的HTML模板中{{.end}}是错误的,正确的模板语法应该是{{end}},否则模板渲染会失败:

{{range . }}
<li>
    <td>{{.idЖанр}}</td>
    <td>{{.Название_жанра}}</td>
</li>
{{end}} <!-- 去掉前面的点 -->

另外,<li>标签嵌套在<table>中不符合HTML规范,应该用<tr>表示表格行:

{{range . }}
<tr>
    <td>{{.idЖанр}}</td>
    <td>{{.Название_жанра}}</td>
</tr>
{{end}}

修复建议

  1. 调整路由注册,去掉末尾斜杠,让它匹配/dat和/dat/(Go的http包会自动处理这种情况):
http.HandleFunc("/dat", home_db)

或者保留/dat/,确保访问时带上末尾斜杠。

  1. 将main函数中的db赋值给全局database变量:
database, err := sql.Open("mysql", "xxxxx:xxxxxx@tcp(xx.xx.xxx.xxx:xx)/xxxxx")

或者直接在home_db函数中使用局部变量传递数据库连接(更推荐,避免全局变量)。

  1. 修复HTML模板的语法错误和标签嵌套问题。

内容的提问来源于stack exchange,提问作者Primel88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:35:21