Go 语言圣经学习笔记-3.基础数据类型

2019-06-21

本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:王超的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!

3.1 整型

go提供了有符号和无符号类型的整数。有int8 int16 int32 int64四种类型的有符号整形,还分别有uint8 uint16 uint32 uint64四种无符号整数。 还有对应特定cpu平台及其字大小的int和uint,有相同的大小,32或64bit。 rune Unicode字符类型和int32等价。byte和uint8类型等价。 无符号的整数类型uintptr 没有指定具体的bit大小但是足以容纳指针,一般底层编程才需要。

一个算数的结果,如果需要更多的bit才能正确表示的话,那就说明计算结果溢出了,超出的部分会被丢弃。

运算没有什么特别的。

3.2 浮点数

Go语言提供了两种精度的浮点数,float32和float64。通常应该优先使用float64类型,因为float32类型的累计计算误差很容易扩散,并且float32能精确表示的正整数不是很大。

3.3 复数

Go提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。

3.4 布尔型

一个布尔类型的值只有两种:true和false。 进行逻辑运算时,也会有短路行为。布尔值不能隐式转换为数字0或1。

3.5 字符串

字符串是一个不可改变的字节序列。字符串可以包含任意的数据。 len函数可以返回一个字符串的字节数目。第i个字节不一定是字符串的第i个字符。 字符串不可更改,所以尝试修改字符串内部数据的操作也是被禁止的。

3.5.1 字符串面值

Go语言源文件总是用UTF-8编码,并且Go语言的文本字符串也以UTF8编码。 双引号包含的字符串面值中,可以通过转义序列插入特殊的字符。 原生的字符串面值,使用反引号代替双引号,全部的都使用的字面的意思,包含退格和换行。

3.5.2 Unicode

unicode对应go语言中的rune整数类型,等价int32.

  • 暂不关注细节。

3.5.3 UTF-8

  • 暂不关注细节

3.5.4 字符串和Byte切片

标准库中有四个包对字符串处理尤为重要:bytes、strings、strconv和unicode包。strings包提供了许多如字符串的查询、替换、比较、截断、拆分和合并的功能。

字符串包含的只读字节数组,一旦创建,是不可变的,相比之下,一个字节slice的元素则可以自由的修改。 一个[]byte(s)转换是分配了一个新的字节数组,用于保存字符串数据的拷贝,然后引用这个底层的字节数组。而反向转换,则是构造一个字符串拷贝。

bytes包还提供了Buffer类型用于字节slice的缓存。

3.5.5 字符串和数字的转换

除了字符串、字符、字节之间的转换,字符串和数值之间的转换也比较常见。由strconv包提供这类转换。

3.6 常量

常量表达式的值在编译期计算,而不是在运行期。常量潜在类型都是基础类型:boolean、string或数字。

常量不可更改,这样可以防止在运行期被意外或者恶意的修改。 可以一次定义多个常量。常量的所有算术运算、逻辑运算和比较运算的结果也是常量,对常量的类型转换操作或者一下函数调用都返回常量结果:len、cap、real、imag、complex和unsafe.Sizeof.

如果是批量声明的常量,除了第一个外其他的常量右边的初始化表达式可以省略,省略代表使用前面初始化表达式的写法。

3.6.1 iota常量生成器

常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。

3.6.2 无类型常量

Go语言的常量有个不同寻常之处。许多常量没有一个明确的基础类型,通过延迟明确常量的具体类型,可以直接用于更多的表达式而不需要显式的类型转换。

无类型的整数常量默认转换为int,对应不确定的内存大小,但是浮点数和复数常量默认转换为float64和complex128.

文章评论

comments powered by Disqus


章节列表