Go 语言提供了多种数据结构以满足不同的需求。本文将介绍数组、切片(Slice)和关联数组(Map),并提供简单的示例代码。

1. 数组

数组是固定长度的集合,元素类型相同。数组的长度是数组类型的一部分。

示例代码

package main

import "fmt"

func main() {
// 声明一个数组
var arr [5]int

// 初始化数组
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5

// 输出数组
fmt.Println("数组:", arr)

// 声明并初始化数组
arr2 := [3]string{"apple", "banana", "cherry"}
fmt.Println("数组2:", arr2)
}

2. 切片(Slice)

切片是对数组的抽象,可以动态增长。切片不是固定长度的,使用起来更灵活。

示例代码

package main

import "fmt"

func main() {
// 声明切片
var slice []int

// 使用 make 创建切片
slice = make([]int, 0)

// 添加元素
slice = append(slice, 1)
slice = append(slice, 2, 3, 4, 5)

// 输出切片
fmt.Println("切片:", slice)

// 切片的切片
subSlice := slice[1:4] // 获取索引 1 到 3 的元素
fmt.Println("切片的切片:", subSlice)
}

3. 关联数组(Map)

Map 是一种无序的键值对集合,键是唯一的。它非常适合用来存储关联数据。

示例代码

package main

import "fmt"

func main() {
// 声明并初始化一个 Map
var m map[string]int
m = make(map[string]int)

// 添加元素
m["Alice"] = 25
m["Bob"] = 30

// 输出 Map
fmt.Println("关联数组:", m)

// 访问元素
age := m["Alice"]
fmt.Println("Alice 的年龄:", age)

// 检查键是否存在
if age, exists := m["Charlie"]; exists {
fmt.Println("Charlie 的年龄:", age)
} else {
fmt.Println("Charlie 不在 Map 中")
}

// 删除元素
delete(m, "Bob")
fmt.Println("删除 Bob 后的关联数组:", m)
}

4. 总结

  • 数组:固定长度的元素集合,使用简单但不够灵活。
  • 切片:动态长度的数组,能够根据需要扩展,使用更方便。
  • 关联数组(Map):无序的键值对集合,适合存储关联数据,键唯一。