从零学 Go:数组的使用
前文回顾
前面的文章主要介绍了 Go 基于语法中的分支和循环控制结构。其中涉及到的 If 、Switch 和 for 等关键字,是我们日常编码所常用的。当我们在程序中操作大量同类型变量时,为了方便数据的存储和操作,我们需要借助容器的力量。 本文我们将介绍 Go 容器:数组。
Go 中常用的容器
Golang 中以标准库的方式提供了常用的容器实现,基本能够满足我们日常开发的需要。我们来具体学习下 Go 数组的使用。
数组
Go 语言提供了数组类型的数据结构。
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。
相对于声明 number0, number1, …, number99 的变量,使用数组形式 numbers[0], numbers[1] …, numbers[99] 更加方便且易于扩展。
数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。数组的声明样式如下所示:
var name [size]T
数组大小必须指定,可以是一个常量或者表达式,但必须在静态编译时就确定其大小,不能动态指定。T
表示数组成员的类型,可为任意类型。
对数组的初始化和使用与其他语言一般无二,可以在声明时使用初始化列表对数组进行初始化,也可以通过下标对数据成员进行访问和赋值,如下所示:
func main() {
var classMates1 [3]string
classMates1[0] = "小明"
classMates1[1] = "小红"
classMates1[2] = "小李" // 通过下标为数组成员赋值
fmt.Println(classMates1)
fmt.Println("The No.1 student is " + classMates1[0]) // 通过下标访问数组成员
classMates2 := [...]string{"小明", "小红", "小李"} // 使用初始化列表初始化列表
fmt.Println(classMates2)
}
在使用初始化列表初始化数组时,需要注意 []
内的数组大小需要和 {}
内的数组成员的数量一致,上述例子中我们使用 ...
让编译器为我们根据 {}
内成员的数量确定数组的大小。
除此之外,我们还可以使用指针操作数组,如下例子所示:
classMates3 := new([3]string)
classMates3[0] = "小明"
classMates3[1] = "小红"
classMates3[2] = "小李"
fmt.Println(*classMates3)
我们通过 new
函数申请了 [3]string
的内存空间,并返回了其对应的指针。需要注意的是,该指针无法支持偏移和运算,这是 Golang 对指针类型的限制。我们可以通过指针直接操作数组,与 C 语言中的指针功能无异。
小结
数组是一段存储固定类型固定长度的连续内存空间,它的大小在声明的时候就已经固定下来了。虽然数组的大小不可变化,数组的成员可以修改。
Go 语言中与数组类似的容器还有切片,对于切片的使用,很多人搞不清切片与数组的区别。我们下面一篇文章将会介绍切片的使用。
阅读最新文章,关注公众号:aoho求索
- 点赞
- 收藏
- 关注作者
评论(0)