Golang 语言基础之三: array, slice
Golang 语言基础系列:
- Golang 语言基础之一: type, variable, constant
- Golang 语言基础之二: for, ifelse, switch
- Golang 语言基础之三: array, slice
- Golang 语言基础之四: map, range
- Golang 语言基础之五: function
- Golang 语言基础之六: string, pointer
- Golang 语言基础之七: struct, method
- Golang 语言基础之八: interface
- Golang 语言基础之九: error, panic, recover
- Golang 语言基础之十: goroutine, channel
数组
Golang 语言中,一个数组是一组已被编号的属于同一类型的元素。数组中元素的个数就是数组的长度。数组的类型由数组中元素的类型和数组的长度共同定义,数组在未指定长度时默认长度为零。数组元素的索引从 0
到 len(ArrayObject) - 1
或者说 cap(ArrayObject) - 1
。
还是从例子来看:
将上面的代码存入源文件 array.go 并使用 go run array.go
可以看到下面的输入:
关于数组需要注意的是:
- 由于数组长度是数组类型的组成部分,所以数组长度必须在声明数组的时候就是确定的常量。
- 数组赋值和数组进行参数传递时都会进行值拷贝,所以在参数传递时为了提高效率可以考虑使用
slice
或者数组指针。
- 在 Golang 语言基础之二: for, ifelse, switch 的
for
语句例子中,我们看到了如何定义数组指针 *[]T
和指针的数组 [*]T
。
- 由于数据在声明时长度已经确定,Golang也会对数组中的元素进行初始化(默认初始值为零值),所以数组对象可以直接进行
==
和 !=
的逻辑比较。
Slice (切片)
slice
是 Golang 中的一个重要数据类型,由前面对数组的讨论可知,数组在一些情况下(比如进行参数传递)使用不方便,数组的类型由数组元素的类型和数组长度确定,这点对使用其作为参数的函数来说限制太大。所以 Golang 中提供了 slice
数据结构,其是对相关数组的一个连续片段的引用,故而 slice
是一个引用类型。它的长度是可变的,从零到相关数组的长度。len
内置函数返回 slice
对象的当前长度,cap
内置函数返回 slice
对象的最大长度。
slice
在源码文件 runtime.h
中的定义为:
看个例子:
将上面的代码存入源文件 slice.go 并使用 go run slice.go
可以看到下面的输入:
slice
的具体用法和注意事项在上面实例中注释部分,稍多,但是作为 Golang 的重要数据类型,需要完全掌握。
参考资料
-- EOF --
有疑问加站长微信联系(非本文作者)