Go语言基础 | 青训营笔记

106 阅读4分钟

今天的学习主要聚焦于Go的基本类型和引用类型

基本类型

  1. 布尔类型(bool):

布尔类型只有两个值:true 和 false。用于表示逻辑真假。布尔类型占用 1 个字节的内存空间,且不能与整数类型相互转换。

  1. 数字类型:
  • 整型(int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、uintptr):分别表示有符号整数和无符号整数,大小和位数都有所不同。其中,int 和 uint 的大小和平台有关。int8 和 uint8 分别占用 1 个字节的内存空间,int16 和 uint16 分别占用 2 个字节的内存空间,int32 和 uint32 分别占用 4 个字节的内存空间,int64 和 uint64 分别占用 8 个字节的内存空间,uintptr 类型用于存储指针地址。
  • 浮点型(float32、float64):用于表示小数,分别占 32 位和 64 位。浮点型在计算机内部采用科学计数法来表示,因此精度有限。
  • 复数型(complex64、complex128):用于表示复数,分别由两个浮点数构成。complex64 占用 8 个字节的内存空间,complex128 占用 16 个字节的内存空间。
  1. 字符串类型(string):

字符串是不可变的,一旦创建就不能被修改。字符串可以由单个字符组成,也可以由多个字符组成。字符串是 Unicode 编码的,因此可以表示各种语言的字符和符号。字符串可以用双引号或反引号括起来。

  1. 数组类型:

数组是一个固定长度的序列,其中每个元素的类型都相同。数组在定义后大小就不能改变,因此其长度必须在编译时确定。数组类型的定义方式为 var arr [5]int,其中 5 表示数组的长度,int 表示数组的元素类型。

  1. 切片类型(slice):

切片是对数组的一个动态视图,可以用于存储任意数量的元素,长度和容量都可以在运行时进行扩展。切片类型的定义方式为 var s []int,其中 []int 表示切片的元素类型为 int。

  1. 映射类型(map):

映射是一种无序的键值对集合,其中每个键必须是唯一的。映射在实现上是一个哈希表,可以高效地进行查找、

引用类型

在 Go 中,引用类型是指那些指向内存中一个变量或者数据结构的指针。Go 的引用类型包括切片(slice)、映射(map)、通道(channel)和接口(interface)。

  1. 切片(slice)是一个引用类型,它是一个动态数组,可以随时增加或者删除元素,其底层数据结构是一个数组,由于切片是引用类型,因此多个变量可以共享同一个底层数组。切片有三个属性:长度、容量和指向底层数组的指针。
  2. 映射(map)是一种无序的键值对的集合,它是通过哈希表来实现的。映射的键和值可以是任意类型,且可以动态添加或删除键值对。因为映射是引用类型,所以多个变量可以共享同一个底层哈希表。
  3. 通道(channel)是 Go 中的一个并发原语,它用于在不同的 goroutine 之间传递数据。通道是一个引用类型,由于通道是并发安全的,因此多个 goroutine 可以通过同一个通道来进行通信。
  4. 接口(interface)是一种抽象类型,它没有具体的实现,只定义了一组方法。接口可以嵌套在其他接口中,可以用于实现多态和依赖倒置原则。在 Go 中,接口是通过方法集来定义的,只要一个类型实现了接口的所有方法,它就可以被赋值给该接口类型的变量。

引用类型的特点是它们在传递时不会被复制,而是传递一个指向底层数据结构的指针。因此,引用类型可以节省内存,并且在传递大型数据结构时可以提高效率。同时,引用类型也需要注意并发访问的安全问题,尤其是映射和切片在并发访问时需要进行加锁保护。