初始化切片
// 声明一个空切片,未初始化任何元素 var slice1 []int // 初始化一个切片,包含指定元素 slice2 := []int{1, 2, 3, 4, 5} // 使用 `make` 函数创建一个切片,指定长度和容量 slice3 := make([]int, 5) // 长度为 5,容量也是 5 slice4 := make([]int, 5, 10) // 长度为 5,容量为 10 // 创建一个从数组的子部分生成的切片 arr := [5]int{1, 2, 3, 4, 5} slice5 := arr[1:4] // 切片从数组的索引 1 到 4(不包含索引 4) fmt.Println(slice1) // 输出: [] fmt.Println(slice2) // 输出: [1 2 3 4 5] fmt.Println(slice3) // 输出: [0 0 0 0 0] fmt.Println(slice4) // 输出: [0 0 0 0 0] fmt.Println(slice5) // 输出: [2 3 4]
增加元素
// 创建并初始化一个切片 slice := []int{1, 2, 3} // 使用 `append` 添加元素 slice = append(slice, 4) // 在末尾添加一个元素 fmt.Println(slice) // 输出: [1 2 3 4] // 在指定位置插入元素 slice = append(slice[:2], append([]int{10}, slice[2:]...)...) fmt.Println(slice) // 输出: [1 2 10 3 4]
删除元素
// 创建并初始化一个切片 slice := []int{1, 2, 3, 4, 5} // 删除索引为 2 的元素(值为 3) slice = append(slice[:2], slice[3:]...) fmt.Println(slice) // 输出: [1 2 4 5]
移动元素
// 创建并初始化一个切片 slice := []int{1, 2, 3, 4, 5} // 将索引 1 位置的元素(值为 2)移动到索引 3 的位置 element := slice[1] slice = append(slice[:1], append([]int{element}, slice[2:]...)...) fmt.Println(slice) // 输出: [1 3 4 2 5]
初始化数组
// 初始化一个长度为 5 的整数数组,元素默认为 0 var arr1 [5]int // 初始化并赋值一个数组 arr2 := [3]int{1, 2, 3} // 使用 ... 来推断数组的长度 arr3 := [...]int{1, 2, 3, 4, 5} // 初始化一个包含不同类型元素的数组 arr4 := [3]interface{}{1, "hello", 3.14} fmt.Println(arr1) // 输出: [0 0 0 0 0] fmt.Println(arr2) // 输出: [1 2 3] fmt.Println(arr3) // 输出: [1 2 3 4 5] fmt.Println(arr4) // 输出: [1 hello 3.14]
初始化Map
package main import "fmt" func main() { var user = make(map[string]string) user["name"] = "张三" user["age"] = "20" fmt.Println(user) var user2 = map[string]string{ "name": "张三", "age": "20", } fmt.Println(user2) //修改Map数据 user["name"] = "李四" fmt.Println(user) }
区别
特性 | 数组(Array) | 映射(Map) | 切片(Slice) |
---|---|---|---|
类型 | 值类型 | 引用类型 | 引用类型 |
大小 | 固定大小(不可改变) | 动态大小(可以增删元素) | 动态大小(可以扩展) |
访问方式 | 按索引访问 | 按键访问 | 按索引访问(切片本质上是对数组的引用) |
存储方式 | 顺序存储,元素顺序固定 | 无序存储 | 顺序存储,元素顺序不固定 |
性能 | 适合小型固定数据集合,访问速度较快 | 插入、删除、查找非常高效 | 动态扩展,适合变化大小的数据集合 |
键值对 | 不支持键值对 | 每个元素由键和值组成 | 不支持键值对 |
使用场景 | 用于知道数据量固定、结构简单的情况 | 用于需要快速查找、键值映射或动态增删数据的情况 | 用于大小不固定,且需要灵活扩展或裁剪数据的情况 |
输出格式 | | | |