数组 Array
- 数组是相同类型数据的集合,数组类型的长度是不可变的。
- 数组类型的零值一定是不包含任何元素的空数组,填充元素为对应类型的零值。
- 索引表达式和切片表达式都可以应用于数组,包括len和cap函数。
- 使用
...
标记数组长度标识由编译器计算元素数量来指定长度,但此时要指定数组所包含的元素。
实例
package main
import "fmt"
func main() {
nums := []int{1,2,3}
fmt.Println(len(nums),cap(nums))
}
切片 Slice
- 切片是对数组的包装形式。切片本身不拥有任何数据,只是对现有数组的引用。
- 对切片所做的任何修改都会反映在底层数组中。
- 切片类型的零值为
nil
;一个nil
切片的长度和容量为 0。 - 切片操作
[a:b]
返回的数据包括索引a但不包括索引b,其中 a>=0。
省略a时默认值为 0,省略 b 时默认值为数组的长度,a、b 可以同时省略。 - 切片的长度表示切割指定的元素个数,容量表示从切割开始位置起原始数组的元素个数。
- 如果添加的元素的个数超过了容量的值,内存管理器会重新划分一块容量值为原容量2倍大小的内存空间,
这个机制可以提升运算性能,因为内存的频繁重新划分会降低性能 。
实例:
package main
import "fmt"
func main() {
nums := []int{1,2,3} // 声明底层数组
fmt.Println(len(nums),cap(nums)) // 打印信息
nums = append(nums,4) // 切片追加元素
nums[0] = -100 // 改变首位数组
fmt.Println(nums,len(nums),cap(nums)) // 打印追加后信息
}
字典 Map
- Go的字典类型 Map 是散列表(hash table)的实现。
- 散列表是一个实现了关联数组的数据结构,关联数组适用于表示键值对的无序集合的一种抽象数据类型。
实例:
func TestMap(t *testing.T) {
nums := map[rune]int{}
nums['A'] = 123
nums['B'] = 456
delete(nums, 'A')
fmt.Printf("%#v", nums)
}
- delete 函数不管键是否存在都会默默执行完毕。
make 函数
- 内置的 make 函数可以用来初始化切片、字典和通道类型的值。
语法:
nums := make([]int,10)
- 这样会为 nums 内的数字全部填充零值 0 。