Go 第5章 数组 Go 第5章 数组

2021-06-08

一、定义数组

数组内元素类型[数组长度]

package main

import "fmt"

func main() {
   var a1 [5]int
   a2 := [3]int{1, 2, 3}
   a3 := new([10]int)
   a3[2] = 5
   fmt.Println(a1, a2, a3)
}

二、自动确定长度

package main

import "fmt"

func main() {
   a := [...]int{1, 2, 3}
   fmt.Println(a)
}

三、多维数组

package main

import "fmt"

func main() {
   var a1 [4][5]int
   a2 := [2][3]int{
      {0, 1, 2},
      {1, 2, 3},
   }
   fmt.Println(a1, a2)
}

四、数组常用方法

  • len() 取数组或者切片长度

  • cap() 取数组或者切片容量

  • 在数组中,他们两个永远相同

package main

import "fmt"

func main() {
   a := [3]int{1, 2, 3}
   fmt.Println(len(a))
   fmt.Println(cap(a))
}

五、遍历数组

  • 可通过_省略变量

  • 不仅 range,任何地方都可通过_省略变量

  • 如果只要 i,可写成 for i := range numbers

package main

import "fmt"

func main() {
   arr := [...]int{2, 4, 6, 8, 10}
   for i := 0; i < len(arr); i++ {
      fmt.Println(arr[i])
   }
   for i, v := range arr {
      fmt.Println(i, v)
   }
   for _, v := range arr {
      fmt.Println(v)
   }
}
  • 数组是值类型

    • [10]int 和 [20]int 是不同类型

    • 调用 func f(arr [10]int) 会拷贝数组

    • 在 go 语言中一般不直接使用数组

package main

import "fmt"

func main() {
   var arr1 [5]int
   arr2 := [...]int{2, 4, 6, 8, 10}
   fmt.Println("printArray(arr1)")
   printArray(arr1)
   fmt.Println("printArray(arr2)")
   printArray(arr2)
   fmt.Println("arr1 and arr2")
   fmt.Println(arr1, arr2)
}
func printArray(arr [5]int) {
   arr[0] = 100
   for i, v := range arr {
      fmt.Println(i, v)
   }
}
阅读 926