关于 数组是可变的 的疑问

文章中的 数组是可变的 应该怎么样去理解呢?
对索引项为 i 的数组元素赋值可以这么操作:arr[i] = value
但是事实上这个赋值

func main() {
  var arr [2]int
  arr[0] = 1
  arr[1] = 2
  arr[2] = 3
  fmt.Println(arr)
}

会报错的 invalid array index 2
文章中所说的如下:
第一个元素是 arr1[0],第三个元素是 arr1[2];总体来说索引 i 代表的元素是 arr1[i],最后一个元素是 arr1[len(arr1)-1]

对索引项为 i 的数组元素赋值可以这么操作:arr[i] = value,所以数组是 可变的

只有有效的索引可以被使用,当使用等于或者大于 len(arr1) 的索引时:如果编译器可以检测到,会给出索引超限的提示信息;如果检测不到的话编译会通过而运行时会 panic:(参考 第 13 章

runtime error: index out of range
最佳答案

@num-10

首先答案是“数组是可变的”,之所以你会有疑问,我觉得可能是你理解的概念有点偏差。

我解释一下,这里的“可变”,指的是数组内容可以变化。比如数组[1,2,3]变成了[1,2,4],数组的内容变化了。

其次,你应该理解数组的长度概念,在你的代码中,声明了数组长度为2,那么用arr[2]去访问第三个元素必然会报错,索引是从0开始数的~

func main() {
  var arr [2]int
  arr[0] = 1
  arr[1] = 2
  arr[2] = 3
  fmt.Println(arr)
}
4周前 评论
讨论数量: 4

:joy:所以问题是什么

4周前 评论
num-10

@Changui sorry,我的问题是数组到底是不是可变的

4周前 评论

@num-10

首先答案是“数组是可变的”,之所以你会有疑问,我觉得可能是你理解的概念有点偏差。

我解释一下,这里的“可变”,指的是数组内容可以变化。比如数组[1,2,3]变成了[1,2,4],数组的内容变化了。

其次,你应该理解数组的长度概念,在你的代码中,声明了数组长度为2,那么用arr[2]去访问第三个元素必然会报错,索引是从0开始数的~

func main() {
  var arr [2]int
  arr[0] = 1
  arr[1] = 2
  arr[2] = 3
  fmt.Println(arr)
}
4周前 评论
num-10

@Changui 谢大佬提示,是我把概念理解错了,这个可变指的是数值的值,数组的长度是固定的 :sweat_smile:

4周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

短小精湛的 Golang 入门教程,是 The Little Go Book 的中文翻译
Github 上《The Way to Go》中文译本的镜像,优化了排版
@无闻 出品的一套面向新手级别学习者 Go 语言的视频教程
一步步带你进入 Go Web 编程的世界,让我们开始探索吧!
号称宇宙最快的 Iris Web 框架的中文文档翻译
Gin 是一个用 Go 语言编写的 WEB 框架,本文档为其中文版本
GORM 是优秀的 Golang ORM 类库,本文档是其官方文档的中文翻译,每年更新