Golang 语法速通指南(五)复合数据类型之数组
首先,在 Go 中数组基本用不上,一般用的都是切片(slice)
因为 Go 与 C 中的数组有一个很大的不同,这个下面会讲,先说一些基本的东西
声明
这个应该很好理解
1 | var a [3]int // array of 3 integers |
初始化
基础的写法
1 | var q [3]int = [3]int{1, 2, 3} |
根据元素个数确定长度
1 | q := [...]int{1, 2, 3} |
注意不是 []int{1, 2, 3}
,这是切片的写法
使用索引和对应值初始化
这是一种 C 里没有的方法,算是一种改进
1 | r := [...]int{99: -1} |
定义了一个含有 100 个元素的数组 r
,最后一个元素被初始化为 -1,其它元素都是用 0 初始化
求长度
使用 len()
函数
1 | var a [3]int // array of 3 integers |
for 遍历
Go 中的 for 基本就和 Python 中的一模一样,分别返回下标和值
1 | // Print the indices and elements. |
当然你也可以只接收值
1 | // Print the elements only. |
与 C 中数组的不同
与 C 相比,最大的区别就是:在 Go 中,数组的长度也是类型的一部分
1 | fmt.Printf("%T\n", q) // "[3]int" |
就如你看见的那样,类型叫做 [3]int
而不是 []int
或者 *int
这就是一个很大的问题:在写函数的时候,输入数组的长度必须是相同的
而且在较新版本的 C 中,数组在声明时可以用一个变量来动态地确定它的长度
但 Go 中不行,数组的的长度必须编译时就确定下来
这两点就使数组非常僵化,极大地限制了数组的应用,除了像 SHA256 这类需要处理特定大小数组的特例外,数组很少用作函数参数
评论
GiscusTwikoo