1 回答
TA贡献1856条经验 获得超17个赞
您的代码可以简化很多:
func FetchListIdsForUser(id string, db *sql.DB) ([]string, error) {
rows, err := db.Query("SELECT unnest(lists) FROM users WHERE object_id = $1", id)
if err != nil {
formattedError := errors.New("FetchListIdsForUser SQL Query: " + err.Error())
return nil, formattedError
}
defer rows.Close()
var lists []string
var list string
for rows.Next() {
// scan every item of the array and append it to lists
err := rows.Scan(&list)
if err != nil {
formattedError := errors.New("FetchListIdsForUser SQL Scan: " + err.Error())
return nil,formattedError
}
lists = append(lists, list)
}
if lists == nil {
// no rows returned
formattedError := errors.New("FetchListIdsForUser: " + id + " Does Not Exist")
return nil, formattedError
}
return lists, nil
}
db.Query()
将为您准备(并缓存)该语句。无需手动执行此操作。我添加
unnest(lists)
到 select 语句中。这将为数组中的每个元素生成一行。在 for 循环中,我们单独扫描每个元素并将其附加到
lists
.
此外,该驱动程序支持开箱即用的扫描阵列。
- 1 回答
- 0 关注
- 358 浏览
添加回答
举报