我们之前学习过的变量,当存储一个名字时可以 name=”shuaigaogao” ,但是如果班级有30个人,每个人的名字都想存储到内存中怎么办呢?总不能用 30 个变量分别来存储吧,这个时候数组就可以发挥作用了。
数组其实是和字符串一样的序列类型、不同于字符串,在内存中连续存储字符,数组用 [] 的语法将同一类型的多个值存储在一块连续内存中。

1、数组的声明语法

  1. var 数组名 [数组长度]元素类型

  1. // 字符串数组的声明
  2. var names [5]string
  3. fmt.Println(names, reflect.TypeOf(names)) // [ ] [5]string
  4. // 数字类型数组声明
  5. var age [5]int
  6. fmt.Println(ages, reflect.TypeOf(ages)) // [0 0 0 0 0] [5]int

如图存储:
5.2、数组 - 图1

  1. 数组的长度是固定的
  2. 元素可以是任意基本类型,但是数组的每一个元素必须是同一数据类型。

2、数组初始化

2.1、先声明再初始化

  1. // string数组的声明
  2. var names [3]string
  3. names[0] = "sgg"
  4. names[1] = "sbh"
  5. names[2] = "xhz"
  6. fmt.Println(names) // [sgg sbh xhz]
  7. // int 数组的声明
  8. var ages [3]int
  9. ages[0] = 22
  10. ages[1] = 32
  11. ages[2] = 44
  12. fmt.Println(ages) // [22 32 44]

5.2、数组 - 图2

2.2、声明初始化

  1. names := [3]string{"sbh", "sgg", "xhz"}
  2. fmt.Println(names)
  3. var ages = [3]int{33, 22, 44}
  4. fmt.Println(ages)

2.3、[…]不限长度

虽然定义的数组是不限程度的,但是一旦初始化完成,长度就是固定的,不能越界访问。

  1. names := [...]string{"sbh", "sgg", "xhz"}
  2. fmt.Println(names, reflect.TypeOf(names)) //[sbh sgg xhz] [3]string
  3. var ages = [...]int{22, 33, 44}
  4. fmt.Println(ages, reflect.TypeOf(ages)) //[22 33 44] [3]int

2.4、索引设置方式

  1. ages := [...]int{0: 22, 2: 33}
  2. fmt.Println(ages) // [22 0 33]

2.5、访问数组数据

  1. ages := [...]int{0: 22, 2: 33, 3: 44, 5: 20}
  2. // 索引取值
  3. fmt.Println(ages[0])
  4. // 切片取值
  5. fmt.Println(ages[:4])
  6. fmt.Println(ages[2:])
  7. // 索引循环取值
  8. for i := 0; i < len(ages); i++ {
  9. fmt.Println(ages[i])
  10. }
  11. // range方式循环取值
  12. for k, v := range ages {
  13. fmt.Println(k, v)
  14. }