Go语言中如何扫描可能为NULL的SQL布尔值?
解决Go语言扫描可空SQL布尔值的问题
Go原生的bool类型无法表示SQL中的NULL值,所以直接扫描到*bool时遇到NULL就会报错。这里提供两种常用的解决方法:
1. 使用标准库的sql.NullBool类型
这是Go标准库专门为处理可空SQL布尔值提供的类型,包含Bool(存储实际布尔值)和Valid(标记是否为非NULL值)两个字段。
示例代码:
import "database/sql" // ... var expired sql.NullBool err := db.QueryRow(context.Background(), sql, id, n).Scan(&expired) if err != nil { // 处理查询或扫描错误 } // 判断值是否有效(非NULL) if expired.Valid { // 获取布尔值:expired.Bool } else { // 处理NULL的业务逻辑 }
2. 使用*bool指针类型
指针的nil状态可以对应SQL的NULL,扫描时如果结果是NULL,指针变量会被设为nil;如果是true或false,指针会指向对应的布尔值。
示例代码:
var expired *bool err := db.QueryRow(context.Background(), sql, id, n).Scan(&expired) if err != nil { // 处理错误 } // 判断是否为NULL if expired != nil { // 获取布尔值:*expired } else { // 处理NULL的业务逻辑 }
内容的提问来源于stack exchange,提问作者ceving
相关产品推荐
相关产品推荐

