01
一:
在整数类型中,有两类,一类是指定长度的(如:uint8、int8、uint16、int16等等),一类是不指定长度的特殊整型(如int、uint、uintptr),它的长度是随所在平台不同而不同,在32位的计算机上则长度为32位,在64位的计算机上则长度为64位。
二:
对于前者只需关注其长度所限定的数值范围就可以了,而对于后者则需要关注不同平台之间的差异性。假如不同平台之间进行编译时使用字节数不同,那么就应该用指定长度的整数类型作统一处理,如果对于字节数并不在意,那么也可以使用特殊类型。
02
一:
布尔型无法和其他的数值类型进行运算,也就是说它并不能使用整数来替代,只能用布尔值。Go语言的类型与类型之间泾渭分明。
二:
不能在用true的地方使用1来代替,也不能在用false的地方使用0来代替。
03
一:
string字符串类型在Go语言中是原生类型的存在,这意味着它不可被修改,或者说只允许覆盖全文本,但不可修改其中的单个字符。
二:
要想修改string字符串中的内容,需要将其转换成[]rune数组,然后对[]rune数组中的目标元素进行修改,再将[]rune转换成string字符串,或者说用该[]rune的内容覆盖掉原string的内容。
04
一:
对于字符串而言,内置函数len()求长度返回的数据是字节数而非字符数,对于符合ASCII码的字符而言,统计的字节数恰好就是字符数,但对于中文这样的字符而言,就不能如实反映字符数量。
二:
如果想要统计一个字符串的字符数(特别是有中文这类不收录于ASCII码中的字符),应当先将其转换成[]rune数组,然后再用len()统计该数组中的元素个数。
05
一:
byte类型实际为一个uint8类型,表示一个ASCII码字符,rune类型实际为一个uint32类型,表示一个Unicode编码(UTF-8),但因为Go对于类型的界限把控严格,所以不可混为一谈。string类型实际上可以视作是一个固定化的、不能修改的byte数组,选用byte作为底层,而不用rune的主要原因是byte虽然不能表示多字节下的字符,但由于其单字节的特性使其更紧凑,占用内存更少,不会像rune那样可能会有许多空闲字节。但也要注意的是byte数组并不像一个string那样,可以存放一个rune的字符,这是因为string虽然是一个byte序列,但其编码规则却是UTF-8的编码规则,因此能够兼容rune字符。
二:
对于string字符串而言,直接将其转换成[]byte是一种粗暴的作为,它会破坏多字节字符的完整性,对于需要处理Unicode编码的文件而言,应该使用rune或者[]rune来进行处理,这样才能确保准确。byte类型可用作底层,来提高性能,但要考虑和rune的兼容问题。
06
一:
Go语言中只支持程序员显式类型强制转换,不支持隐式类型强制转换。类型强转只能在两个彼此支持强转的类型上生效。Go语言的类型分明和只支持显式类型强制转换似乎都在说明Go语言的一个理念导向:它的设计者希望程序员能够对自己的程序的方方面面了如指掌,而不是等编译器完成工作。
二:
首先,要熟知哪些类型是可以彼此支持强转,然后,要明白自己的程序中哪些地方是需要进行强转类型的,自己手动添加上。