第三章 基本数据类型
主要围绕基本类型来讲的一章,仍记得当时看的时候按捺不住想要跳过的心,但是第三章还是非常重要的,有详细讲解最常用的slice
内存模型避免误用,而且还穿插了一些有趣的小例程,譬如教你怎么画一个漂亮的分型图等。
但是这里我只post自己整理的笔记。XD
< P52 >
int
与uint
的字节长度在不同实现的编译器下可能不同,即使是在同一个主机上;%
仅能用于整型;- 在Go中,余数符号永远与被除数相同,即
-5%3
与-5%-3
同样得-2
;
< P57 >
float
类型变量为0时作被除数为可疑运算(dubious operation),若用整型在编译时会报错,可以表示正负无穷以及NaN
(not a number);1
2var z float32
fmt.Println(z, -z, 1/z, -1/z, z/z) // 0 -0 +Inf -Inf NaNmath.NaN
函数也可以返回NaN
,并且NaN
的任何比较结果都是false
,可以使用math.IsNaN
函数判定;
< P63 >
- 如果
s
是空字符串,使用s[0
]会引起panic
; - 不存在
0
或1
等到布尔类型的隐式转换,反过来同理;
< P65 >
- 字符串的值是不可更改的,所以字符串拷贝和子字符串都可以与原串共用同一空间,操作廉价,但是
string
类型变量可以重新赋值; - 内建函数
len
返回的是字符串的byte
数,要在utf-8格式下计数可以用utf8.RuneCountInString
方法;
< P70 >
- 使用
range
遍历字符串时,会隐式对utf8解码,索引i
也会跳动; - 每当utf8解码器遇到一个非预期的
byte
,不管是显式的调用utf8.DecodeRuneInString
方法还是在range
中隐式调用,会产生一个replacement character(\uFFFD),就是常见的黑底六角形加上白色问号的符号;
< P78 >
- 经编译器处理,无类型常量的精度比基本类型更大,且四则运算同样,大约有256 bit的精度;
- 只有常量是无类型的,当常量被赋值给一个特定类型变量时会被隐式转换;