You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:37:06