我们之前学习过的变量,当存储一个名字时可以 name=”shuaigaogao” ,但是如果班级有30个人,每个人的名字都想存储到内存中怎么办呢?总不能用 30 个变量分别来存储吧,这个时候数组就可以发挥作用了。
数组其实是和字符串一样的序列类型、不同于字符串,在内存中连续存储字符,数组用 [] 的语法将同一类型的多个值存储在一块连续内存中。
1、数组的声明语法
var 数组名 [数组长度]元素类型
// 字符串数组的声明
var names [5]string
fmt.Println(names, reflect.TypeOf(names)) // [ ] [5]string
// 数字类型数组声明
var age [5]int
fmt.Println(ages, reflect.TypeOf(ages)) // [0 0 0 0 0] [5]int
如图存储:
- 数组的长度是固定的
- 元素可以是任意基本类型,但是数组的每一个元素必须是同一数据类型。
2、数组初始化
2.1、先声明再初始化
// string数组的声明
var names [3]string
names[0] = "sgg"
names[1] = "sbh"
names[2] = "xhz"
fmt.Println(names) // [sgg sbh xhz]
// int 数组的声明
var ages [3]int
ages[0] = 22
ages[1] = 32
ages[2] = 44
fmt.Println(ages) // [22 32 44]
2.2、声明初始化
names := [3]string{"sbh", "sgg", "xhz"}
fmt.Println(names)
var ages = [3]int{33, 22, 44}
fmt.Println(ages)
2.3、[…]不限长度
虽然定义的数组是不限程度的,但是一旦初始化完成,长度就是固定的,不能越界访问。
names := [...]string{"sbh", "sgg", "xhz"}
fmt.Println(names, reflect.TypeOf(names)) //[sbh sgg xhz] [3]string
var ages = [...]int{22, 33, 44}
fmt.Println(ages, reflect.TypeOf(ages)) //[22 33 44] [3]int
2.4、索引设置方式
ages := [...]int{0: 22, 2: 33}
fmt.Println(ages) // [22 0 33]
2.5、访问数组数据
ages := [...]int{0: 22, 2: 33, 3: 44, 5: 20}
// 索引取值
fmt.Println(ages[0])
// 切片取值
fmt.Println(ages[:4])
fmt.Println(ages[2:])
// 索引循环取值
for i := 0; i < len(ages); i++ {
fmt.Println(ages[i])
}
// range方式循环取值
for k, v := range ages {
fmt.Println(k, v)
}