Go语言基础之复杂数据类型
Go语言基础之复杂数据类型
本文主要介绍数组(array)、切片(slice)、映射(map)及它们的基本使用。
Array(数组)
数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:
// 定义一个长度为3元素类型为int的数组a var a [3]int
数组定义:
var 数组变量名 [元素数量]T
比如:var a [5]int
, 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [5]int
和[10]int
是不同的类型。
数组可以通过下标进行访问,下标是从0
开始,最后一个元素下标是:len-1
,访问越界(下标在合法范围之外),则触发访问越界,会panic。
数组的初始化
初始化数组时可以使用初始化列表来设置数组元素的值。
func main() { var testArray [3]int var numArray = [3]int{1, 2} var cityArray = [3]string{"北京", "上海", "深圳"} fmt.Println(testArray) //[0 0 0] fmt.Println(numArray) //[1 2 0] fmt.Println(cityArray) //[北京 上海 深圳] }
这样写每次都要确保提供的初始值和数组长度一致,但是一般情况下我们只需要让编译器根据初始值的个数自行推断数组的长度,例如:
func main() { var testArray [3]int var numArray = [...]int{1, 2} var cityArray = [...]string{"北京", "上海", "深圳"} fmt.Println(testArray) //[0 0 0] fmt.Println(numArray) //[1 2] fmt.Println(cityArray) //[北京 上海 深圳] }
数组的遍历
遍历数组a有以下两种方法:
// 方法1:for循环遍历 for i := 0; i < len(a); i++ { fmt.Println(a[i]) } // 方法2:range遍历 for index, v := range a { fmt.Println(index, v) }
注意: 1. 数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。 2. 支持 “==“、”!=” 操作符,因为内存总是被初始化过的。 3. 指针数组 [n]*T,数组指针 *[n]T。