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

如何在Go语言中将PostgreSQL查询结果赋值给结构体数组?

问题分析与解决方案

你遇到的问题核心在于用错了sqlx的方法:sqlx.Get是用来获取单条记录的,而你要赋值给一个结构体切片([]Demo),也就是期望返回多条数据,这时候应该用sqlx.Select方法。

具体问题拆解

  • sqlx.Get的设计目标是将查询结果映射到单个结构体(或基本类型),如果查询返回多条记录,它会直接报错;如果没有返回记录,也会返回sql.ErrNoRows错误。
  • 另外你的代码里SQL语句的参数部分多了个多余的逗号:, 5,,这个语法问题也需要修正。

修正后的代码

var test []Demo
// 用Select替换Get,同时去掉参数末尾的多余逗号
err := sqlx.Select(db, &test, `select * from demo where id = $1`, 5)
if err != nil {
    fmt.Println("Error", err)
    fmt.Println("DatabaseExtraction Error")
    return nil, errors.Wrap(err, "select error")
} else {
    fmt.Println("No Extraction Error")
    fmt.Printf("共查询到%d条记录\n", len(test))
}

补充说明

  1. 确保你的Demo结构体的db标签和数据库表的字段名完全匹配(你的定义是对的,id和name对应)。
  2. 如果你的查询条件id = $1本来就只返回单条记录,你也可以把变量改成单个Demo结构体,继续用sqlx.Get:
var test Demo
err := sqlx.Get(db, &test, `select * from demo where id = $1`, 5)
// 后续处理逻辑...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:07:50