初始化切片
// 声明一个空切片,未初始化任何元素
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) |
|---|---|---|---|
类型 | 值类型 | 引用类型 | 引用类型 |
大小 | 固定大小(不可改变) | 动态大小(可以增删元素) | 动态大小(可以扩展) |
访问方式 | 按索引访问 | 按键访问 | 按索引访问(切片本质上是对数组的引用) |
存储方式 | 顺序存储,元素顺序固定 | 无序存储 | 顺序存储,元素顺序不固定 |
性能 | 适合小型固定数据集合,访问速度较快 | 插入、删除、查找非常高效 | 动态扩展,适合变化大小的数据集合 |
键值对 | 不支持键值对 | 每个元素由键和值组成 | 不支持键值对 |
使用场景 | 用于知道数据量固定、结构简单的情况 | 用于需要快速查找、键值映射或动态增删数据的情况 | 用于大小不固定,且需要灵活扩展或裁剪数据的情况 |
输出格式 | | | |
