go语言学习 第7章:数组

发布于:2025-06-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

第7章:数组

数组是一种基本的数据结构,用于存储相同类型的元素集合。在Go语言中,数组的大小是固定的,一旦定义,其长度不可改变。本章将详细介绍Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。

一、数组的定义与初始化

(一)定义数组

在Go语言中,数组的定义格式如下:

var 数组名 [数组大小]数据类型
  • 数组大小:数组中元素的数量,必须是一个常量。
  • 数据类型:数组中所有元素的数据类型。

例如,定义一个包含5个整数的数组:

var scores [5]int

(二)初始化数组

数组可以在定义时进行初始化,也可以在定义后单独赋值。

1. 定义时初始化
var scores [5]int = [5]int{95, 91, 39, 60, 21}

或者更简洁地:

var scores = [5]int{95, 91, 39, 60, 21}
2. 定义后初始化
var scores [5]int
scores[0] = 95
scores[1] = 91
scores[2] = 39
scores[3] = 60
scores[4] = 21

(三)省略数组大小

如果在定义数组时已经提供了初始值,可以省略数组的大小,让编译器自动推断:

var scores = [...]int{95, 91, 39, 60, 21}

二、数组的访问与修改

(一)访问数组元素

通过索引来访问数组中的元素,索引从0开始。例如:

package main

import "fmt"

func main() {
    var scores = [5]int{95, 91, 39, 60, 21}
    fmt.Println("第一个元素:", scores[0])
    fmt.Println("第二个元素:", scores[1])
}

(二)修改数组元素

同样通过索引来修改数组中的元素。例如:

package main

import "fmt"

func main() {
    var scores = [5]int{95, 91, 39, 60, 21}
    scores[2] = 88 // 修改第三个元素
    fmt.Println("修改后的数组:", scores)
}

三、数组的遍历

(一)使用for循环遍历

可以使用普通的for循环来遍历数组。例如:

package main

import "fmt"

func main() {
    var scores = [5]int{95, 91, 39, 60, 21}
    for i := 0; i < len(scores); i++ {
        fmt.Println("索引", i, "的值为:", scores[i])
    }
}

(二)使用for-range循环遍历

for-range循环是Go语言中特有的一种迭代结构,可以更简洁地遍历数组。例如:

package main

import "fmt"

func main() {
    var scores = [5]int{95, 91, 39, 60, 21}
    for index, value := range scores {
        fmt.Println("索引", index, "的值为:", value)
    }
}

四、数组的长度

可以使用内置函数len来获取数组的长度。例如:

package main

import "fmt"

func main() {
    var scores = [5]int{95, 91, 39, 60, 21}
    fmt.Println("数组的长度为:", len(scores))
}

五、多维数组

(一)定义多维数组

多维数组是数组的数组。例如,定义一个2维数组:

var matrix [3][3]int

(二)初始化多维数组

var matrix = [3][3]int{
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9},
}

(三)访问与修改多维数组

package main

import "fmt"

func main() {
    var matrix = [3][3]int{
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9},
    }
    fmt.Println("第一个元素:", matrix[0][0])
    matrix[1][1] = 100 // 修改第二行第二列的值
    fmt.Println("修改后的数组:", matrix)
}

(四)遍历多维数组

package main

import "fmt"

func main() {
    var matrix = [3][3]int{
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9},
    }
    for i := 0; i < len(matrix); i++ {
        for j := 0; j < len(matrix[i]); j++ {
            fmt.Println("matrix[", i, "][", j, "] = ", matrix[i][j])
        }
    }
}

六、数组的内存分析

数组是值类型,存储在栈上。数组的每个元素占用的字节数取决于其数据类型。例如,int类型在64位系统上通常占用8字节,因此一个[5]int数组占用40字节。

七、数组的优缺点

(一)优点

  • 访问速度快:数组的索引访问非常快,时间复杂度为O(1)。
  • 内存连续:数组的元素在内存中是连续存储的,这有助于提高缓存命中率。

(二)缺点

  • 大小固定:数组的大小在定义后不能改变。
  • 灵活性差:数组的大小必须在编译时确定,不能动态调整。

八、总结

本章详细介绍了Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。数组是一种基本的数据结构,适用于存储固定大小的相同类型元素集合。通过合理使用数组,可以实现高效的元素访问和操作。

在实际开发中,数组的固定大小可能会限制其使用场景。在需要动态调整大小的情况下,可以使用切片(将在第8章详细介绍)。数组和切片在Go语言中都是非常重要的数据结构,掌握它们的使用方法对于编写高效、可读性强的代码至关重要。

在接下来的章节中,我们将继续深入学习Go语言的其他特性,如切片、映射等。希望读者能够通过这些内容更好地掌握Go语言,提升编程技能。