Skip to content
Source Code

数组(Arrays)

在Go语言中,数组是一个具有特定长度的元素编号序列。在典型的Go代码中,切片(slice)更常见;数组在某些特殊场景下很有用。

In Go, an array is a numbered sequence of elements of a specific length. In typical Go code, slice are much more common; arrays are useful in some special scenarios.

下面我们创建一个能够存储5个int类型元素的数组a。元素的类型和长度都是数组类型的一部分。默认情况下,数组的值为零值,对于int类型来说就是0

Here we create an array a that will hold exactly 5 ints. The type of elements and length are both part of the array’s type. By default an array is zero-valued, which for ints means 0s.

go
package main

import "fmt"

func main() {
	var a [5]int
	fmt.Println("emp:", a)
	// emp: [0 0 0 0 0]
}
package main

import "fmt"

func main() {
	var a [5]int
	fmt.Println("emp:", a)
	// emp: [0 0 0 0 0]
}
我们可以使用数组[index] = value的语法在特定索引位置设置值,并使用array[index]来获取值。

We can set a value at an index using the array[index] = value syntax, and get a value with array[index].

go
package main

import "fmt"

func main() {
	var a [5]int
	fmt.Println("emp:", a)
	// emp: [0 0 0 0 0]
	a[4] = 100  
	fmt.Println("set:", a)
	// set: [0 0 0 0 100]
	fmt.Println("get:", a[4])
	// get: 100
}
package main

import "fmt"

func main() {
	var a [5]int
	fmt.Println("emp:", a)
	// emp: [0 0 0 0 0]
	a[4] = 100  
	fmt.Println("set:", a)
	// set: [0 0 0 0 100]
	fmt.Println("get:", a[4])
	// get: 100
}
内置函数len返回数组的长度。

The builtin len returns the length of an array.

go
package main

import "fmt"

func main() {
	var a [5]int
	fmt.Println("emp:", a)
	// emp: [0 0 0 0 0]
	a[4] = 100
	fmt.Println("set:", a)
	// set: [0 0 0 0 100]
	fmt.Println("get:", a[4])
	// get: 100

	fmt.Println("len:", len(a)) 
	// len: 5
}
package main

import "fmt"

func main() {
	var a [5]int
	fmt.Println("emp:", a)
	// emp: [0 0 0 0 0]
	a[4] = 100
	fmt.Println("set:", a)
	// set: [0 0 0 0 100]
	fmt.Println("get:", a[4])
	// get: 100

	fmt.Println("len:", len(a)) 
	// len: 5
}
可以使用这种语法在一行中声明和初始化一个数组。

Use this syntax to declare and initialize an array in one line.

go
package main

import "fmt"

func main() {
	b := [5]int{1, 2, 3, 4, 5}
	fmt.Println("dcl:", b)
	// dcl: [1 2 3 4 5]
}
package main

import "fmt"

func main() {
	b := [5]int{1, 2, 3, 4, 5}
	fmt.Println("dcl:", b)
	// dcl: [1 2 3 4 5]
}
数组类型是一维的,但是你可以组合类型来构建多维数据结构。

Array types are one-dimensional, but you can compose types to build multi-dimensional data structures.

go
package main

import "fmt"

func main() {
	var towD [2][3]int
	for i := 0; i < 2; i++ {
		for j := 0; j < 3; j++ {
			towD[i][j] = i + j
		}
	}
	fmt.Println("2d: ", towD)
	// 2d:  [[0 1 2] [1 2 3]]
}
package main

import "fmt"

func main() {
	var towD [2][3]int
	for i := 0; i < 2; i++ {
		for j := 0; j < 3; j++ {
			towD[i][j] = i + j
		}
	}
	fmt.Println("2d: ", towD)
	// 2d:  [[0 1 2] [1 2 3]]
}
注意,使用fmt.Println打印数组时,数组会以[v1 v2 v3 ...]的形式显示。

Note that arrays appear in the form [v1 v2 v3 ...] when printed with fmt.Println.

运行

go
package main

import "fmt"

func main() {

  var a [5]int
  fmt.Println("emp:", a)

  a[4] = 100
  fmt.Println("set:", a)
  fmt.Println("get:", a[4])

  fmt.Println("len:", len(a))

  b := [5]int{1, 2, 3, 4, 5}
  fmt.Println("dcl:", b)

  var twoD [2][3]int
  for i := 0; i < 2; i++ {
      for j := 0; j < 3; j++ {
          twoD[i][j] = i + j
      }
  }
  fmt.Println("2d: ", twoD)
}
package main

import "fmt"

func main() {

  var a [5]int
  fmt.Println("emp:", a)

  a[4] = 100
  fmt.Println("set:", a)
  fmt.Println("get:", a[4])

  fmt.Println("len:", len(a))

  b := [5]int{1, 2, 3, 4, 5}
  fmt.Println("dcl:", b)

  var twoD [2][3]int
  for i := 0; i < 2; i++ {
      for j := 0; j < 3; j++ {
          twoD[i][j] = i + j
      }
  }
  fmt.Println("2d: ", twoD)
}
bash
go run 08-arrays.go
# emp: [0 0 0 0 0]
# set: [0 0 0 0 100]
# get: 100
# len: 5
# dcl: [1 2 3 4 5]
# 2d:  [[0 1 2] [1 2 3]]
go run 08-arrays.go
# emp: [0 0 0 0 0]
# set: [0 0 0 0 100]
# get: 100
# len: 5
# dcl: [1 2 3 4 5]
# 2d:  [[0 1 2] [1 2 3]]

Released under the MIT License.