ZBLOG

golang 数组

Go 语言中的数组详解

Go 语言中的数组是一种固定长度的、相同类型元素的集合。与切片(slice)不同,数组的长度是其类型的一部分,声明后无法改变。

基本语法

// 声明一个长度为5的整型数组
var arr [5]int

// 声明并初始化
var primes = [6]int{2, 3, 5, 7, 11, 13}

// [...]自动计算长度
days := [...]string{"Mon", "Tue", "Wed", "Thu", "Fri"}

主要特点

  1. 固定长度 - 数组长度在编译时确定,是类型的一部分

    var a [3]int    // [3]int类型
    var b [5]int    // [5]int类型 - a和b是不同的类型!
    
  2. 值类型 - 赋值或传递时会复制整个数组内容

    a := [...]int{1, 2, 3}
    b := a          // b是a的完整副本
    b[0] = 9        // a不受影响,a[0]仍然是1
    
  3. 内存布局 - 元素在内存中连续存储

常用操作

访问和修改元素

arr := [3]string{"Go", "Python", "Java"}

// 访问第一个元素(索引从0开始)
first := arr[0]

// 修改第二个元素
arr[1] = "Rust"

遍历数组

colors := [4]string{"Red", "Green", "Blue", "Yellow"}

// for循环遍历
for i := 0; i < len(colors); i++ {
    fmt.Println(colors[i])
}

// range方式遍历(推荐)
for index, value := range colors {
    fmt.Printf("Index: %d, Value: %s\n", index, value)
}

多维数组

// 二维数组声明和初始化
var matrix [2][3]int = [2][3]int{
    {1, 2, 3},
    {4, 5, 6},
}

fmt.Println(matrix[1][2]) // =>6 (第二行第三列)

Go中更常用的替代方案:切片(Slice)

虽然Go有数组,但在实际开发中更常用的是切片(Slice),因为切片更灵活:

  • 动态大小:可以增长和缩小(通过append等)
  • 引用语义:传递时不复制底层数据
slice := []int{10,20}     // slice不是array!
slice = append(slice,30) // slice可以扩展长度 

Go中何时使用数组?

尽管不常用,但以下场景适合使用数组:

  1. 需要精确控制内存布局(如加密算法)
  2. 需要编译器保证固定大小
  3. 性能关键路径(避免切片的额外间接层)

Array vs Slice比较表

特性 Array Slice
长度 固定 可变
类型 [n]T []T
传递方式 值传递(复制) 引用传递
创建方式 [n]T{}或[…]T{} make([]T,len), []T{}, array[:], newSlice:=oldSlice[:end-start+1]
常见用途 特殊需求、低级编程 日常开发

希望这个总结对你有帮助!对于大多数Go应用开发来说,掌握切片比深入了解数组更重要。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23826

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?