Query Rows With database/sql
Run a parameterised query and scan each row into a struct, closing rows and checking the iteration error so resources are not leaked.
Code
package store
import (
"context"
"database/sql"
)
type User struct {
ID int64
Email string
}
func ListActiveUsers(ctx context.Context, db *sql.DB) ([]User, error) {
rows, err := db.QueryContext(ctx,
"SELECT id, email FROM users WHERE active = $1 ORDER BY id", true)
if err != nil {
return nil, err
}
defer rows.Close()
var users []User
for rows.Next() {
var user User
if err := rows.Scan(&user.ID, &user.Email); err != nil {
return nil, err
}
users = append(users, user)
}
if err := rows.Err(); err != nil {
return nil, err
}
return users, nil
}Report a problem with this exampleOpens a pre-filled issue on GitHub.