引入
表示 true 或 false,通常用于条件判断。布尔值是程序做决策的基础——if、for、switch 全靠它来控制走向。Go 的 bool 类型很纯粹,只有两个值,不能和整数互转,这让代码更清晰。
正文
定义
定义
bool是 Go 的布尔类型,只有true和false两个值。布尔值通过比较运算和逻辑运算产生,用于控制程序的条件分支和循环。
语法
// 声明布尔值
var isActive bool = true
var isDeleted bool = false
// 比较运算产生布尔值
a := 10 > 5 // true
b := 10 == 5 // false
// 逻辑运算
c := true && false // false
d := true || false // true例子
比较运算
比较运算的结果是 bool:
a := 10
b := 20
fmt.Println(a == b) // false
fmt.Println(a != b) // true
fmt.Println(a > b) // false
fmt.Println(a < b) // true
fmt.Println(a >= b) // false
fmt.Println(a <= b) // true| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
== | 等于 | 10 == 10 | true |
!= | 不等于 | 10 != 20 | true |
> | 大于 | 10 > 5 | true |
< | 小于 | 10 < 5 | false |
>= | 大于等于 | 10 >= 10 | true |
<= | 小于等于 | 10 <= 5 | false |
逻辑运算
x := true
y := false
fmt.Println(x && y) // false(与:两个都为 true 才是 true)
fmt.Println(x || y) // true(或:有一个为 true 就是 true)
fmt.Println(!x) // false(非:取反)| 运算符 | 含义 | 说明 |
|---|---|---|
&& | 逻辑与 | 两边都 true 才 true |
|| | 逻辑或 | 有一个 true 就 true |
! | 逻辑非 | 取反 |
短路求值
// && 短路:左边 false,右边不执行
if false && expensiveFunc() {
// expensiveFunc() 不会被调用
}
// || 短路:左边 true,右边不执行
if true || expensiveFunc() {
// expensiveFunc() 不会被调用
}短路求值是从左到右的,左边已经能确定结果,右边就不再执行。这个特性常用来做安全检查:
if ptr != nil && ptr.Value > 0 {
fmt.Println("有效值")
}先判断指针不为 nil,再访问它的值,避免空指针 panic。
条件判断中使用
age := 18
isAdult := age >= 18
if isAdult {
fmt.Println("成年人")
} else {
fmt.Println("未成年")
}
// 也可以直接在 if 里写比较表达式
if age >= 18 {
fmt.Println("成年人")
}布尔值不能和整数互转
// 以下全部编译报错
// var b bool = 1 // 错误
// var n int = true // 错误
// if 1 { } // 错误
// 必须显式判断
n := 1
if n != 0 {
fmt.Println("非零")
}Go 不允许把整数当布尔值用,这和 C/C++、Python、JavaScript 都不同。
布尔值零值
var b bool
fmt.Println(b) // falsebool 的零值是 false。
常见写法
| 写法 | 说明 |
|---|---|
var b bool = true | 显式声明 |
b := a > 10 | 比较运算得到布尔值 |
x && y | 逻辑与 |
x || y | 逻辑或 |
!x | 逻辑非 |
ptr != nil && ptr.X | 短路保护 |
if b { … } | 布尔值直接做条件 |
特点
bool只有true和false,没有其他值- 不能和整数互转,
0不是false,1不是true &&和||支持短路求值,可以用来做安全检查- 零值是
false - 比较运算符
==、!=、>、<、>=、<=结果是bool if条件必须是bool类型,不能放数字或指针
理解
Go 的布尔类型非常干净:只有 true 和 false,不掺杂任何整数的概念。短路求值是写安全代码的利器——先检查指针非空,再访问它的字段,一行就搞定。Go 不允许 if 1 这种写法,虽然看起来严格,但确实能避免很多低级错误。
引出
布尔值和字符串里都提到了 UTF-8 编码和字符。那 Go 里单个字符到底是什么类型?接下来看 Go rune 和 byte,搞清楚 rune 和 byte 的区别以及 Unicode 编码。