go - 如何使用 pgx 将 QueryRow 扫描到结构中

标签 go struct psql pgx

我们正在使用一个包含很多字段的用户结构,如下所示:

type user struct {
    ID       int    `json:"id,omitempty"`
    UUID     string `json:"uuid,omitempty"`
    Role     int    `json:"role,omitempty"`
    Name     string `json:"name,omitempty"`
    Surname  string `json:"surname,omitempty"`
    Phone    string `json:"phone,omitempty"`
    Email    string `json:"email,omitempty"`
    Street   string `json:"street,omitempty"`
    City     string `json:"city,omitempty"`
    Password string `json:"password,omitempty"`
}

以及通过电子邮件获取用户的功能:
func getUserByEmail(email string) (u user, err error) {
    row := db.Psql.QueryRow(
        context.Background(),
        "SELECT * FROM users WHERE email=$1",
        email)
    err = row.Scan(&u.ID, &u.UUID, &u.Role, &u.Name, &u.Surname, &u.Phone, &u.Email, &u.Street, &u.City, &u.Password)
    if err != nil {
        log.Fatal(err)
    }
    return
}

有没有办法直接扫描到结构而不是它的所有属性?理想情况下:
row.Scan(&u)

最佳答案

不是使用普通的 database/sql,而是有一个名为 sqlx 的扩展库,它构建在 database/sql 之上,并添加了一些有用的扩展,例如将行解码为结构(包括嵌套)、 slice 和数组:

type Place struct {
    Country       string
    City          sql.NullString
    TelephoneCode int `db:"telcode"`
}

rows, err := db.Queryx("SELECT * FROM place")
for rows.Next() {
    var p Place
    err = rows.StructScan(&p)
}

查看 documentation 并查找 StructScan

关于go - 如何使用 pgx 将 QueryRow 扫描到结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61704842/

相关文章:

go - 是否需要 gin-gonic 支持?

string - 如何在 Go 中高效地将字符串转换为字节 slice ,包括最后的 0?

data-structures - golang 为什么我们没有一套数据结构

c - 结构体元素删除自身

postgresql - 如何在 psql/postgres 中显示 "invisible"unicode 字符?

postgresql - 如何将 PSQL 命令行拆分为多行?

go - 在 go 中对一个 uint64 slice 进行排序

C - 如何在 C 中使用结构体获取时间

postgresql - 使用psql时如何在postgres中选择模式?

c - 在程序结束时检测到堆栈崩溃