一个布尔类型的值只有两种: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异常。
布尔值并不会隐式转换为数字值0或1,反之亦然。必须使用if语句显示的进行转换:
```
i := 0
if b {
i = 1
}
```
**总结:布尔型无法参与值运算,也无法与其他类型进行转换。**
- 1.Go语言前景
- 2.Go语言环境搭建
- 3.Go语言的基本语法
- 3.1变量
- 3.1.1变量声明
- 3.1.2变量初始化
- 3.1.3多个变量同时赋值
- 3.1.4匿名变量
- 3.1.5变量的作用域
- 3.1.6整型
- 3.1.7浮点类型
- 3.1.8复数
- 3.1.9bool类型
- 3.1.10字符串
- 3.1.11字符类型
- 3.1.12类型转换
- 3.2常量
- 3.1.1const关键字
- 3.2.2模拟枚举
- 4.Go语言的流程控制
- 4.2循环结构
- 4.3键值循环
- 4.4switch语句
- 4.5goto语句
- 4.6break语句
- 4.7continue语句
- 5.Go语言的函数
- 5.1函数声明
- 5.2函数变量
- 5.3函数类型实现接口
- 5.4闭包
- 5.5可变参数
- 5.6defer(延迟执行语句)
- 5.7处理运行时错误
- 5.8宕机(panic)
- 5.9宕机恢复(recover)
- 5.10Test功能测试函数
- 6.Go语言的内置容器
- 6.1数组
- 6.2切片
- 6.3map
- 6.4sync.Map
- 6.5list
- 6.6range
- 7.Go语言的结构体
- 8.Go语言的接口
- 9.Go语言的常用内置包
- 10.Go语言的并发
- 11.Go语言的文件I/O操作
- 12.Go语言的网络编程
- 13.Go语言的反射
- 14.Go语言的数据库编程
- 15.Go语言密码学算法
- 16.Go语言的gin框架
- 17.Go语言的网络爬虫
- 18.Go语言的编译和工具链