Golang编程:深入理解array、slice与map

0 下载量 142 浏览量 更新于2024-09-02 收藏 64KB PDF 举报
"Golang学习笔记(四):array、slice、map" 在Golang中,数组、切片和映射(map)是三种非常重要的数据结构,它们各自有着不同的特性和用途。 一、Array(数组) 1. **声明与赋值**: 数组是一种固定大小的序列,其长度在声明时就必须指定。例如: ```go var a [5]int // 定义一个长度为5的整型数组,初始值为0 var b int = [5]int{1, 2, 3, 4, 5} // 声明并初始化 a := [3]int{1, 2, 3} // 使用 := 简化声明 ``` 对于多维数组,可以这样定义: ```go var doubleArray [2][4]int{{1, 2, 3, 4}, {5, 6, 7, 8}} // 2x4 的二维数组 ``` 数组的长度是其类型的一部分,不可改变。 2. **元素访问**: - 使用索引访问,如 `array[i]`。 - 使用 `for` 循环遍历: ```go for i := 0; i < len(array); i++ { fmt.Println(i, array[i]) } ``` - 或使用 `range` 遍历: ```go for i, v := range array { fmt.Println(i, v) } ``` 3. **数组与指针**: 数组赋值是值的复制,不是引用。如果需要传递数组的引用,应使用切片(slice)。 二、Slice(切片) 1. **创建与初始化**: 切片是对数组的引用,可以动态增长。创建方式: ```go s := make([]int, 3) // 创建一个长度为3的空切片 s = []int{1, 2, 3} // 初始化切片 s := a[1:3] // 从数组 a 中创建切片 ``` 切片的长度可以通过 `len(s)` 获得,可以通过 `s = append(s, val)` 添加元素。 2. **操作与特性**: - 切片可以动态扩展,而数组的长度是固定的。 - 切片可以共享同一个底层数组,因此对切片的修改会影响到原始数组。 - 切片可以通过索引或 `range` 遍历元素。 三、Map(映射) 1. **声明与初始化**: 映射用于存储键值对,声明方式: ```go m := make(map[string]int) // 声明一个字符串到整型的映射 m := map[string]int{"key1": 1, "key2": 2} // 初始化映射 ``` 映射的键和值可以是任何可比较的类型。 2. **操作与访问**: - 使用 `m[key]` 获取或设置映射中的值。如果键不存在,`m[key]` 返回零值。 - 使用 `delete(m, key)` 删除键值对。 - 使用 `len(m)` 获取映射中键值对的数量。 - 遍历映射需使用 `for` 循环,因为映射无顺序: ```go for key, value := range m { fmt.Println(key, value) } ``` 在实际编程中,根据需要选择使用数组、切片或映射。数组适用于固定大小且不需要动态调整的数据,切片则提供了灵活的数组操作,而映射则适合关联数据的存储。理解它们之间的差异和用法对于编写高效的Go程序至关重要。