常见的有,布尔类型,整型,浮点型,字符串
我们重点在于这些类型在Go中和其他语言中的不同之处
首先说,无论何种基本类型,在Go中都是具有零值的,也就是都会被赋予一个默认值。
对于基本类型,bool和其他的函数中一样,默认值是false
对于数值类型,Go中的数值类型可以分为3个大类和12个不同的子类,
三个大类指的是整型,浮点型,复数型
对于整型,则是具有有符号整形和无符号整形
基本上由
int和uint
各自又是由8,16,32,64个比特组成的不同的类型
不过默认值都是0罢了
而且byte本质上就是uint8
对于这些整型的使用,使用的时候需要官方给出了一些建议,
首先是根据使用的类型,选择不同类型的整形
如果是需要一个可以适用于任何整形的库函数,则是推荐编写一对函数,一个函数对应的int64,一个函数对应的uint64,但是由于Go不支持使用泛型,所以需要在函数名称上进行一些区分,比如strconv中的FormatInt和FormatUint,基本上算法和逻辑相同,但是函数类型不同。
初次之外,Go中的整型也是支持常见的算术运算符 +=, -=, *=
对于浮点型,Go支持的浮点型有float32和float64
但是由于计算机本身具有的精准问题,所以浮点数往往只能取到近似值,丢失了部分的精度
所以无法进行 == 进行比较,所以往往两个浮点数看起来相同,但是比较结果却不同,一般的做法是定义一个最小方差,然后比较这两个浮点数的差异是否小于这个最小值。
最后是关于复数型
复数型一般不会直接使用,Go中尺寸支持两种复数型 complex64,complex128
complex64的实数和虚数都是float32的值,128则都是float63组成的
使用起来可以为
x := complex(2.5,3.1)
y := complex(10.2,2)
不过由于内部使用的是float,所以还是不精准的。
除了一些数字,字符串作为变成的必备类型也是具有的,Go中的字符串可以支持使用==、!=、>=进行排序
除了上面的基本类型的使用,Go中的数据类型不支持自动转换的,而是需要进行显式的类型转换
就好比
var x int = 10
var y float64 = 30.2
var z float64 = float(x) + y