那就好好生活努力成长吧,生活慢慢亦漫漫,一切难讲。
Go 基本数据类型
-
布尔类型
-
整型
-
浮点类型
-
复数类型
-
字符类型
-
字符串
布尔类型
Go 语言中的布尔类型与其他主流编程语言差不多,类型关键字为 bool,可赋值且只可以赋值为预定义常量 true 和 false
Go 是强类型语言,变量类型一旦确定,就不能将其他类型的值赋值给该变量,因此,布尔类型不能接受其他类型的赋值,也不支持自动或强制的类型转换。
布尔类型无法参与数值运算,也无法与其他类型进行转换 布尔类型的默认值为false
在 Go 语言中,不同类型的值不能使用 == 或 != 运算符进行比较,在编译期就会报错。
整型
整型是所有编程语言里最基础的数据类型,Go 语言默认支持如下这些整型类型:
-
默认的数字定义类型是int类型
-
带个u就是无符号型,只能存正整数
-
后面的数字就是2进制的位数
-
uint8还有一个别名byte,一个字节等于8个bit位
-
int类型的大小取决于所使用的平台
Go 支持的整型类型非常丰富,你可以根据需要设置合适的整型类型,以节省内存空间,int 和 int32 在 Go 语言里被认为是两种不同的类型(同理,int 和 int64 也是不同的类型),编译器也不会帮你自动做类型转换,比如以下的例子会有编译错误:
用强制类型转换可以解决这个编译错误:
浮点型
浮点型也叫浮点数,用于表示包含小数点的数据,比如 3.14、1.00 都是浮点型数据。
Go 语言支持两种浮点类型 float32 和 float64,其中 float32 是单精度浮点数,可以精确到小数点后 7 位,float64 是双精度浮点数,可以精确到小数点后 15 位。
float32浮点数的最大范围为3.4e38
float64浮点数的最大范围为1.8e308
在 Go 语言里,定义一个浮点型变量的代码如下
如果没有显示声明类型,则默认为float64,在实际开发中,应该尽可能地使用 float64 类型,因为 math 包中所有有关数学运算的函数都会要求接收这个类型。
浮点数不是一种精确的表达方式,因为二进制无法精确表示所有十进制小数
你觉得上面计算结果 floatValue6 的值是多少?0.8?不,它的结果是 0.7999999999999999,这是因为计算机底层将十进制的 0.1 和 0.7 转化为二进制表示时,会丢失精度,所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
浮点数的运算和整型一样,也要保证操作数的类型一致,float32 和 float64 类型数据不能混合运算,需要手动进行强制转化才可以,这一点和动态语言不同。
浮点数支持通过算术运算符进行四则运算,也支持通过比较运算符进行比较(前提是运算符两边的操作数类型一致)
复数类型
除了整型和浮点型之外,Go 语言还支持复数类型,与复数相对,我们可以把整型和浮点型这种日常比较常见的数字称为实数,复数是实数的延伸,可以通过两个实数(在计算机中用浮点数表示)构成,一个表示实部(real),一个表示虚部(imag),常见的表达形式如下:
其中 a、b 均为实数,i 称为虚数单位,当 b = 0 时,z 就是常见的实数,当 a = 0 而 b ≠ 0 时,将 z 称之为纯虚数,如果你理解数学概念中的复数概念,这些都很好理解。
在 Go 语言中,复数支持两种类型:complex64(32 位实部和虚部) 和 complex128(64 位实部与虚部),对应的表示示例如下,和数学概念中的复数表示形式一致:
对于一个复数 z = complex(x, y),就可以通过 Go 语言内置函数 real(z) 获得该复数的实部,也就是 x,通过 imag(z) 获得该复数的虚部,也就是 y。
复数支持和其它数字类型一样的算术运算符。当你使用 == 或者 != 对复数进行比较运算时,由于构成复数的实数部分也是浮点型,需要注意对精度的把握。
字符类型
Go 语言对字符串中的单个字符进行了单独的类型支持,在 Go 语言中支持两种字符类型:
-
byte,代表 UTF-8 编码中单个字节的值(它也是 uint8 类型的别名,两者是等价的,因为正好占据 1 个字节的内存空间);
-
rune,代表单个 Unicode 字符(它也是 int32 类型的别名,因为正好占据 4 个字节的内存空间。)。
UTF-8 和 Unicode 的区别
从 Unicode 字符集的视角看,字符串的每个字符都是一个字符的独立单元,但如果从 UTF-8 编码的视角看,一个字符可能是由多个字节编码而来的。
字符串
在 Go 语言中,字符串是一种基本类型,默认是通过 UTF-8 编码的字符序列,当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节,比如中文编码通常需要 3 个字节。
- 声明和初始化
Go 语言的字符串不支持单引号,只能通过双引号定义字符串字面值,默认值是空字符串
- 转义字符
如果要对特定字符进行转义,可以通过 \ 实现,就像我们上面在字符串中转义双引号和换行符那样,常见的需要转义的字符如下所示:
- \n :换行符
- \r :回车键
- \t :制表符
- \u :Unicode 字符
- \ :反斜杠自身
- 多行字符串
多行字符串,可以通过 ` 构建
- 字符串连接 字符串连接只需要通过 + 连接符即可:
零值问题
如果我们操作数据类型,只声明不赋值,变量默认对应类型的零值。例如 int 为0 、bool 为false、字符串为""。