如何在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)) }
补充说明
- 确保你的
Demo结构体的db标签和数据库表的字段名完全匹配(你的定义是对的,id和name对应)。 - 如果你的查询条件
id = $1本来就只返回单条记录,你也可以把变量改成单个Demo结构体,继续用sqlx.Get:
var test Demo err := sqlx.Get(db, &test, `select * from demo where id = $1`, 5) // 后续处理逻辑...
内容的提问来源于stack exchange,提问作者user2433953
相关产品推荐
相关产品推荐

