Appearance
数据类型概述及布尔类型
Go 支持的数据类型
Go 语言内置对以下这些基本数据类型的支持:
- 布尔类型:bool
- 整型:int8、byte、int16、int、uint、uintptr 等
- 浮点类型:float32、float64
- 复数类型:complex64、complex128
- 字符串:string
- 字符类型:rune
- 错误类型:error
此外,Go 语言还支持以下这些复合类型:
- 指针(pointer)
- 数组(array)
- 切片(slice)
- 字典(map)
- 通道(chan)
- 结构体(struct)
- 接口(interface)
与其他静态语言不同的是,Go 新增了一个通道类型,该类型主要用于并发编程时不同协程之间的通信,后面介绍 Go 语言并发编程的时候会详细介绍它。
结构体类似于面向对象编程语言中的类(class),Go 沿用了 C 语言的这一复合类型,而没有像传统面向对象编程那样引入单独的类概念,Go 语言还把接口单独作为一个类型提出来,后面介绍 Go 语言面向对象编程的时候会详细介绍这两个类型的使用。
布尔类型
Go 语言中的布尔类型与其他主流编程语言差不多,类型关键字为 bool
,可赋值且只可以赋值为预定义常量 true
和 false
。示例代码如下:
Go
var v1 bool
v1 = true
v2 := (1 == 2) // v2 也会被推导为 bool 类型
Go 是强类型语言,变量类型一旦确定,就不能将其他类型的值赋值给该变量,因此,布尔类型不能接受其他类型的赋值,也不支持自动或强制的类型转换。以下的示例是一些错误的用法,会导致编译错误:
Go
var b bool
b = 1 // 编译错误
b = bool(1) // 编译错误
不过通过表达式计算得到的布尔类型结果可以赋值给 Go 布尔类型变量:
Go
var b bool
b = (1!=0) // 编译正确
fmt.Println("Result:", b) // 打印结果为Result: true
此外,由于强类型的缘故,Go 语言在进行布尔值真假判断时,对值的类型有严格限制,在 PHP 这种弱类型语言中,以下这些值在进行布尔值判断的时候(使用非严格的 ==
比较符)都会被认为是 false
(JavaScript、Python 也类似):
- 布尔值
FALSE
本身 - 整型值
0
(零) - 浮点型值
0.0
(零) - 空字符串,以及字符串 “0”
- 不包括任何元素的数组
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的 SimpleXML 对象
而在 Go 语言中则不然,不同类型的值不能使用 ==
或 !=
运算符进行比较,在编译期就会报错,比如下面这段代码:
Go
b := (false == 0);
在编译的时候就会报如下错误:
cannot convert 0 (type untyped number) to type bool
invalid operation: false == 0 (mismatched types bool and int)
同样,!
运算符也不能作用于非布尔类型值。
注意️⚠️:
- 布尔类型默认值为
false
- 不允许将
整型
强制转为布尔类型 - 布尔类型不能参与
数值运算
,也无法与其他类型进行转换