第三章 基本数据类型
主要围绕基本类型来讲的一章,仍记得当时看的时候按捺不住想要跳过的心,但是第三章还是非常重要的,有详细讲解最常用的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的精度;
- 只有常量是无类型的,当常量被赋值给一个特定类型变量时会被隐式转换;