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

Golang连接MySQL报invalid memory address空指针panic问题求助

错误原因定位

1. 直接代码逻辑问题

你调用db.Query()执行SQL后未判断返回的错误,一旦SQL执行失败,返回的getarticle(*sql.Rows类型)就是nil,后续直接调用nil.Next()就会触发空指针panic,这是报错的直接触发原因。

2. 根因:Docker容器无法访问宿主机MySQL

你的MySQL部署在宿主机的XAMPP环境中,代码里连接地址写的是127.0.0.1:3306,而Docker容器的127.0.0.1指向容器自身的回环地址,根本无法访问到宿主机的MySQL服务,导致db.Query()执行失败返回nil结果。

修复方案
  1. 补全所有数据库操作的错误判断
    首先在db.Query()后增加错误判断逻辑,先把真实的连接错误暴露出来,避免空指针调用:
getarticle, err := db.Query("SELECT * FROM article")
// 新增错误判断
if err != nil {
    panic(err.Error())
}
// 用完记得关闭Rows避免资源泄漏
defer getarticle.Close()

同时注意你当前的Scan逻辑存在问题:SELECT *会返回article表的4个字段,你只传了1个Scan参数会触发字段不匹配错误,需要修改为和结构体字段数量、顺序匹配:

err = getarticle.Scan(&article.Author, &article.Title, &article.Body, &article.Created)
  1. 修正Docker访问宿主机MySQL的配置
  • 修改数据库连接地址:将127.0.0.1替换为Docker bridge网络的宿主机默认网关172.17.0.1,连接串改为root:@tcp(172.17.0.1:3306)/api_golang
  • 开放MySQL远程访问权限:登录宿主机MySQL执行以下SQL,允许来自Docker网关的root账号访问目标库:
GRANT ALL PRIVILEGES ON api_golang.* TO 'root'@'172.17.0.1' IDENTIFIED BY '你的MySQL root密码';
FLUSH PRIVILEGES;
  • 修改MySQL绑定地址:编辑XAMPP的MySQL配置文件my.cnf,将bind-address从127.0.0.1改为0.0.0.0,重启MySQL服务生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:06