QQ图片20220423131139.png

Go 专栏的第三篇,本文内容依旧很基础,很简单。如果有编程经验的话,可能扫一眼就了然于胸了。但如果刚开始接触编程,建议还是好好看看,把文中的代码 demo 都自己跑一遍。只有基础打好了,才能向更高的目标迈进。


话不多说,走起~


Go 的数据类型分四大类:


  1. 基础类型: 数字 number,字符串 string 和布尔型 boolean。
  2. 聚合类型: 数组 array 和结构体 struct。
  3. 引用类型: 指针 pointer,切片 slice,字典 map,函数 func 和通道 channel。
  4. 接口类型: 接口 interface。


其中,基础类型又分为:


  1. 整型: int8、uint8、byte、int16、uint16、int32、uint32、int64、uint64、int、uint、uintptr。
  2. 浮点型: float32,float64。
  3. 复数类型: complex64、complex128。
  4. 布尔型: bool。
  5. 字符串: string。
  6. 字符型: rune。


整数


整数一共有 12 种类型,分为有符号整数和无符号整数,为了方便查看,我在这里整理了一个表格:



一般我们在开发的时候,使用 int 和 uint 即可。除非有明确需要指定长度的需求,才用 int8 这种类型。


类型转换


不管是算术运算,还是逻辑运算,Go 要求操作数的类型必须一致,如果不一致的话,会报错。



这一点在写代码的时候,开发工具就会提醒了,而且还会把强制类型转换的代码给写好,还是很棒的。



但有一点需要注意,当浮点型转整型的话,可能会有精度损失。



数值运算


+-*/%


%



/



比较运算


>>=<<===!=


不同类型之间不可比较,但整型可以与字面量直接比较。



位运算


&|^&^<<>>


这个就不过多介绍了,平时开发过程中用到的也比较少。


浮点数


浮点类型包括两种,分别是 float32 和 float64。


浮点数字面量会被自动推断为 float64。



==!=


复数


复数类型包括两种,分别是 complex64 和 complex128。


操作复数的内置函数一共有 3 个,分别是:


complexrealimag



布尔值


布尔类型的关键字是 bool,有两个值,分别是: true 和 false。



布尔型和整型不能相互转换。



iffor



字符串


字符串关键字是 string,也属于一种基本类型。


字符串可以直接通过字面量来初始化:



`



拼接字符串:



获取字符串长度:



按索引下标来获取字符:



字符串切片:



字符串是不可修改的,所以如果给字符串赋值的话,会报错:



遍历字符串:



从结果可以看出两者的区别,第一种是以字节数组方式遍历;第二种是以 Unicode 字符方式遍历。


以字节数组方式遍历,字符类型是 byte,长度是 1。虽然字符串直观上看长度是 8,但中文字符在 UTF-8 编码中占 3 个字符,所以总长度是 12。


以 Unicode 方式遍历,字符类型是 rune。


Go 中支持两种字符类型,一个是 byte,uint8 的别名,表示 UTF-8 字符串的单个字节的值;另一个是 rune,int32 的别名,表示单个 Unicode 字符。


最后再说一点,Go 的源文件是按 UTF-8 编码的,所以我们在选择编码格式上一定要选 UTF-8,否则可能会有一些莫名其妙的错误出现。


总结


本文主要介绍了五种基础数据类型,分别是:整数,浮点数,复数,布尔值和字符串。

其中复数用的比较少,整数和浮点数主要用在需要数值类型的场景,布尔值大多用在条件语句。


字符串的使用还是挺多的,而且也有一些标准库的支持,比如 bytes、strings、strconv、unicode。


有时间的话还是要多学学标准库才行。



文章中的脑图和源码都上传到了 GitHub,有需要的同学可自行下载。