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

Golang无法将MySQL查询结果追加到结构体切片的问题

问题解决:MySQL查询无结果但Workbench执行正常

你的问题出在SQL语句的语法错误上,MySQL里单引号'是用来定义字符串常量的,不是列名、表名这类标识符的包裹符。

原代码的错误点

看你写的SQL:

SELECT 'description','is_done' FROM tasks WHERE 'user_id' = ?;
  • 'description'和'is_done'不是查询表的列,而是返回两个固定字符串"description"和"is_done";
  • 'user_id' = ?是拿字符串"user_id"和传入的userId参数做比较,这两个值永远不相等,自然查不到符合条件的数据。

修正后的代码

把SQL里的单引号去掉(如果列名是关键字,可用反引号`包裹,这里不需要):

query, err := db.Query("SELECT description, is_done FROM tasks WHERE user_id = ?;", userId)
if err != nil {
    return nil, err
}
defer query.Close()
var tasks []TodoUserDTO
var currentTask TodoUserDTO
for query.Next() {
    err = query.Scan(&currentTask.Description, &currentTask.IsDone)
    if err != nil {
        panic(err)
    }
    tasks = append(tasks, currentTask)
}
// 补充:遍历结束后检查是否有遍历过程中的错误
if err := query.Err(); err != nil {
    panic(err)
}

额外提醒

  • 结构体的json:"desc"这类tag只影响JSON序列化,和数据库扫描无关,你的结构体定义没问题;
  • 遍历完结果集后,一定要调用query.Err()检查是否在遍历过程中出现错误,避免遗漏潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:16:36