Scan error on column index 15, name "name": converting NULL to string is unsupported
golang 使用数据库查询,绑定结果报错;大概意思就是不能将 null 类型的结果转成 string。
有三种处理方法:
第一种:
package demo
type User struct {
Id string
FirstName string
LastName string
}
func findUserByEmail(ctx context.Context, email string) {
user := &User{}
row := DbConn.QueryRowContext(ctx, `
SELECT id, COALESCE(first_name, '') as first_name, COALESCE(last_name, '') as last_name
FROM users
WHERE email = $1
`, email)
err := row.Scan(&user.Id, &user.FirstName, &user.LastName)
// ...
}
重点看是个 COALESCE(first_name, '') as first_name
第二种:
type User struct {
Id string
FirstName *string `db:"first_name"`
LastName *string `db:"last_name"`
}
将结构体对应字段类型设为指针类型,一劳永逸,不用担心 json 序列化与反序列化问题;重点是这个 FirstName *string db:"first_name"
第三种:
func findUserByEmail(ctx context.Context, email string) {
user := &User{}
var st1 sql.NullString
var st2 sql.NullString
row := DbConn.QueryRowContext(ctx, `
SELECT id, first_name, last_name
FROM users
WHERE email = $1
`, email)
err := row.Scan(&user.Id, &st1, &st2)
user.FirstName = str1
user.LastName = str2
// ...
}
重点是这个 var st1 sql.NullString