从零学 Go:数组的使用

举报
aoho 发表于 2021/09/26 19:07:11 2021/09/26
【摘要】 前文回顾前面的文章主要介绍了 Go 基于语法中的分支和循环控制结构。其中涉及到的 If 、Switch 和 for 等关键字,是我们日常编码所常用的。当我们在程序中操作大量同类型变量时,为了方便数据的存储和操作,我们需要借助容器的力量。 本文我们将介绍 Go 容器:数组。 Go 中常用的容器Golang 中以标准库的方式提供了常用的容器实现,基本能够满足我们日常开发的需要。我们来具体学习下...

前文回顾

前面的文章主要介绍了 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求索

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。