散记01:基本数据类型

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语言的一个理念导向:它的设计者希望程序员能够对自己的程序的方方面面了如指掌,而不是等编译器完成工作。

二:

首先,要熟知哪些类型是可以彼此支持强转,然后,要明白自己的程序中哪些地方是需要进行强转类型的,自己手动添加上。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值