1. 数组Array
- 数组:是一种数据类型的固定长度的序列。
- 定义:数组长度必须是常量且是类型的组成部分。一旦定义长度不能变。 例如:
var a [10]int - 长度是数组类型的一部分。
var a [5]int和var a [10]int是不同的类型。 - 数组可以通过下标访问,下标从0开始。
- 访问越界:如果访问下标在数组的范围之外,则会造成越界。
- 支持“==”和“!=”操作符。
1.1 数组的初始化
var a [5]int = [5]int{1, 2, 3, 4, 5}
var b = [5]int{1, 2, 3}
var c = [5]string{3: "hello", 4: "world"}
2. 切片Slice
slice不是数组或数组指针。它通过内部指针和相关属性引用数组片段,以实现变长方案。
- 切片:切片是数组的一个引用,切片是引用类型。
- 切片的长度可以改变,切片是一个可变的数组。
- 切片遍历方式和数组一样,可以用len()求长度,读写操作不能超过该范围。
- cap可以求出切片最大扩张容量,不能超出数组限制。
0 <= len(slice) <= len(array) - 切片的定义:var 变量名 []类型。例如:
var a []string - 如果 slice == nil,那么len、cap的结果都等于 0。
操作:
- s[n]:切片s中索引位置为n的项
- s[:]:从切片s的索引位置0到len(s) - 1处所获得的切片
- s[low:]:从切片s的索引位置low到len(s) - 1处所获得的切片
- s[:high]:从切片s的索引位置0到high处所获得的切片,len = high
- s[low:high]:从切片s的索引位置low到high处所获得的切片,len = high - low
- s[low:high:max]:从切片s的索引位置low到high处所获得的切片,len = high - low,cap = max - low
- len(s):切片s的长度,总是<=cap(s)
- cap(s):切片s的容量,总是>=len(s)
3. 指针
指针地址、指针类型、指针取值
3.1 Go语言中的指针
Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针而无需拷贝数据。类型指针不能进行偏移和运算。Go原因呢中的指针操作很简单,两个符号:& (取地址)和 * (根据地址取值)。
3.2 指针地址和指针类型
每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&放在变量前面对变量进行取地址操作。Go语言中的值类型都有对应的指针类型。
心得体会(总结)
- 切片是动态数组:Golang的切片是一种抽象数据类型,它提供了对底层数组的访问和操作。与传统的数组不同,切片的长度可以在运行时进行扩容或缩减,使其具有更高的灵活性。
- 切片的声明与初始化:切片可以使用make函数来进行声明和初始化,也可以通过简化的切片字面量进行快速初始化。
- 切片与数组的比较:与数组相比,切片更加灵活且易于使用。切片的长度可以动态改变,可以方便地进行追加、删除和截取等操作。而数组的长度固定,在静态分配内存空间时更高效。