我们正在使用一个具有许多字段的用户结构,如下:
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)
.Select()
或.Get()
scany函数之一,并正常传递参数,scany将把它们传递给底层的数据库库,负责转义它们,以防止注入攻击。 - Georgy Savva