Go语言bool类型(布尔类型)

简介: 本文详解Go语言布尔类型:仅含true/false;支持!、&&、||操作(含短路特性);比较需同类型;不支持与数字隐式转换,须用if或封装函数(如btoi/itob)显式转换;强制类型转换会编译报错。

一个布尔类型的值只有两种:true 或 false。if 和 for 语句的条件部分都是布尔类型的值,并且==和<等比较操作也会产生布尔型的值。


一元操作符!对应逻辑非操作,因此!true的值为 false,更复杂一些的写法是(!true==false) ==true,实际开发中我们应尽量采用比较简洁的布尔表达式,就像用 x 来表示x==true。

var aVar = 10
aVar == 5  // false
aVar == 10 // true
aVar != 5  // true
aVar != 10 // false

Go语言对于值之间的比较有非常严格的限制,只有两个相同类型的值才可以进行比较,如果值的类型是接口(interface),那么它们也必须都实现了相同的接口。如果其中一个值是常量,那么另外一个值可以不是常量,但是类型必须和该常量类型相同。如果以上条件都不满足,则必须将其中一个值的类型转换为和另外一个值的类型相同之后才可以进行比较。


布尔值可以和 &&(AND)和 ||(OR)操作符结合,并且有短路行为,如果运算符左边的值已经可以确定整个布尔表达式的值,那么运算符右边的值将不再被求值,因此下面的表达式总是安全的:

s != "" && s[0] == 'x'

其中 s[0] 操作如果应用于空字符串将会导致 panic 异常。


因为&&的优先级比||高(&& 对应逻辑乘法,|| 对应逻辑加法,乘法比加法优先级要高),所以下面的布尔表达式可以不加小括号:

if 'a' <= c && c <= 'z' ||
    'A' <= c && c <= 'Z' ||
    '0' <= c && c <= '9' {
    // ...ASCII字母或数字...
}

布尔值并不会隐式转换为数字值 0 或 1,反之亦然,必须使用 if 语句显式的进行转换:

i := 0
if b {
    i = 1
}

如果需要经常做类似的转换,可以将转换的代码封装成一个函数,如下所示:

// 如果b为真,btoi返回1;如果为假,btoi返回0
func btoi(b bool) int {
    if b {
        return 1
    }
    return 0
}

数字到布尔型的逆转换非常简单,不过为了保持对称,我们也可以封装一个函数:

// itob报告是否为非零。
func itob(i int) bool { return i != 0 }

Go语言中不允许将整型强制转换为布尔型,代码如下:

var n bool
fmt.Println(int(n) * 2)

编译错误,输出如下:

cannot convert n (type bool) to type int

布尔型无法参与数值运算,也无法与其他类型进行转换。

相关文章
|
网络协议 Linux Go
分享一个go开发的工具-SNMP Server
分享一个go开发的工具-SNMP Server
642 0
|
6月前
|
存储 NoSQL 项目管理
【2026最新】Notion中文版安装和使用图文教程
Notion是一款全能型AI工作台,集成笔记、文档、数据库、项目管理、知识库与日历看板于一体。支持多端同步、中文界面、丰富模板及团队协作,个人版完全免费,功能强大且易上手。(239字)
|
6月前
|
安全
《提前设断点,再也不慌!QClaw长任务防中断指南》
本文直击智能工具长任务中断后进度清零、盲目续传导致内容混乱的普遍痛点,剖析了“直接说接着写”这种原始方式成功率极低的底层原因。文章指出QClaw断点续传的本质是手动重建任务状态快照,而非简单复制全文,系统讲解了提取逻辑骨架、补充原始约束、增量分块续传、预先设置天然断点、跨会话状态持久化等核心实操技巧。同时点明断点续传不仅是工具功能,更是一种长任务管理思维,能帮助使用者彻底摆脱进度丢失的困扰,大幅提升复杂长任务的处理效率。
402 8
|
6月前
|
Go 索引
Go语言数组的用法
Go语言中,数组是固定长度、同类型元素的序列,长度属类型组成部分,编译期确定。虽少直接使用,但为理解切片基础。支持声明、初始化、索引访问、遍历及相等比较(需类型完全相同)。
|
6月前
|
安全 API 开发者
多平台号码标记来电显示查询API接口介绍
本服务提供多平台号码标记查询API,支持腾讯手机管家、百度手机卫士、电话邦、360手机卫士、泰迪熊等多家平台。可快速识别陌生号码是否为骚扰、营销或商业推广电话,助力来电显示标记、智能拦截、通信风控与运营归因,提升通话效率与安全体验。
1289 3
|
6月前
|
SQL 存储 关系型数据库
【第1天】每天一个MySQL知识点,百日打怪升级
本系列以“每天一个知识点”形式,系统讲解MySQL核心原理。首日聚焦Client/Server通信流程,详解三层架构(连接层→SQL层→存储引擎层)、连接管理、查询解析优化及执行计划,直击面试高频考点,助你从CRUD进阶到懂原理、能排障。(239字)
364 0
|
人工智能 自然语言处理 运维
AI性能极致体验:通过阿里云平台高效调用满血版DeepSeek-R1模型
DeepSeek是近期热门的开源大语言模型(LLM),以其强大的训练和推理能力备受关注。然而,随着用户需求的增长,其官网在高并发和大数据处理场景下常面临服务不稳定的问题。本文将深度测评通过阿里云平台调用满血版DeepSeek模型(671B),以充分发挥其性能和稳定性。阿里云提供高效、低延迟、大规模并发支持及稳定的云服务保障,并为用户提供100万免费token,简化操作流程,确保企业在AI应用上的高效性和成本效益。尽管如此,DeepSeek API目前不支持联网搜索和图片、文档分析功能,需结合其他工具实现。
2195 17
淘宝API接口( item_detail - 淘宝商品详情查询)
淘宝商品详情查询 API(item_detail)用于获取淘宝商品的详细信息。请求参数包括商品唯一 ID(num_iid)和是否获取促销价(is_promotion)。响应参数包含商品标题、价格、库存、图片链接、品牌等详细信息。
1278 2
|
网络虚拟化 安全 网络架构
|
Linux 测试技术 数据库
解决django与sqlite3不兼容报SQLite 3.9.0 or later is required (found 3.8.2)错的问题
解决django与sqlite3不兼容报SQLite 3.9.0 or later is required (found 3.8.2)错的问题
1081 2