Thinking_Out_Loud

《Go程序设计语言》读书笔记#2

2018-09-07

第三章 基本数据类型

主要围绕基本类型来讲的一章,仍记得当时看的时候按捺不住想要跳过的心,但是第三章还是非常重要的,有详细讲解最常用的slice内存模型避免误用,而且还穿插了一些有趣的小例程,譬如教你怎么画一个漂亮的分型图等。

但是这里我只post自己整理的笔记。XD

< P52 >

  • intuint的字节长度在不同实现的编译器下可能不同,即使是在同一个主机上;
  • %仅能用于整型;
  • 在Go中,余数符号永远与被除数相同,即-5%3-5%-3同样得-2

< P57 >

  • float类型变量为0时作被除数为可疑运算(dubious operation),若用整型在编译时会报错,可以表示正负无穷以及NaN(not a number);

    1
    2
    var z float32
    fmt.Println(z, -z, 1/z, -1/z, z/z) // 0 -0 +Inf -Inf NaN
  • math.NaN函数也可以返回NaN,并且NaN的任何比较结果都是false,可以使用math.IsNaN函数判定;

< P63 >

  • 如果s是空字符串,使用s[0]会引起panic
  • 不存在01等到布尔类型的隐式转换,反过来同理;

< P65 >

  • 字符串的值是不可更改的,所以字符串拷贝和子字符串都可以与原串共用同一空间,操作廉价,但是string类型变量可以重新赋值;
  • 内建函数len返回的是字符串的byte数,要在utf-8格式下计数可以用utf8.RuneCountInString方法;

< P70 >

  • 使用range遍历字符串时,会隐式对utf8解码,索引i也会跳动
  • 每当utf8解码器遇到一个非预期的byte,不管是显式的调用utf8.DecodeRuneInString方法还是在range中隐式调用,会产生一个replacement character(\uFFFD),就是常见的黑底六角形加上白色问号的符号;

< P78 >

  • 经编译器处理,无类型常量的精度比基本类型更大,且四则运算同样,大约有256 bit的精度;
  • 只有常量是无类型的,当常量被赋值给一个特定类型变量时会被隐式转换;