我们之前学习过的变量,当存储一个名字时可以 name=”shuaigaogao” ,但是如果班级有30个人,每个人的名字都想存储到内存中怎么办呢?总不能用 30 个变量分别来存储吧,这个时候数组就可以发挥作用了。
数组其实是和字符串一样的序列类型、不同于字符串,在内存中连续存储字符,数组用 [] 的语法将同一类型的多个值存储在一块连续内存中。
1、数组的声明语法
var 数组名 [数组长度]元素类型
// 字符串数组的声明var names [5]stringfmt.Println(names, reflect.TypeOf(names)) // [ ] [5]string// 数字类型数组声明var age [5]intfmt.Println(ages, reflect.TypeOf(ages)) // [0 0 0 0 0] [5]int
如图存储: 
- 数组的长度是固定的
- 元素可以是任意基本类型,但是数组的每一个元素必须是同一数据类型。
2、数组初始化
2.1、先声明再初始化
// string数组的声明var names [3]stringnames[0] = "sgg"names[1] = "sbh"names[2] = "xhz"fmt.Println(names) // [sgg sbh xhz]// int 数组的声明var ages [3]intages[0] = 22ages[1] = 32ages[2] = 44fmt.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]stringvar 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)}
