This paper describes the Go language array (array) and its basic use.
Array (Array)
An array is a collection of elements of the same data type. In the Go language, it is determined that a statement from an array, you can modify the array members use, but can not change the array size. The basic syntax:
// 定义一个长度为3元素类型为int的数组a
var a [3]int
Array definition:
var 数组变量名 [元素数量]T
For example: var a [5]int
the length of the array must be a constant, and the length of a portion of the array type. Once defined, the length can not be changed. [5]int
And [10]int
are of different types.
var a [3]int var b [4]int a = b //不可以这样做,因为此时a和b是不同的类型
The array can be accessed by subscript, subscript from the 0
start, the last element index is: len-1
, access violation (subscript outside the legal range), the access violation is triggered, it will panic.
Array initialization
Initialize the array, there are many ways.
method one
You can use the initialization list to set the value of the array elements of the array initialization.
func main() { var testArray [3]int //数组会初始化为int类型的零值 var numArray = [3]int{1, 2} //使用指定的初始值完成初始化 var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化 fmt.Println(testArray) //[0 0 0] fmt.Println(numArray) //[1 2 0] fmt.Println(cityArray) //[北京 上海 深圳] }
Method Two
According to the above method ensures consistent initial value every time the length of the array and provides, in general, we have the compiler can infer the length of the array according to the number of its own initial value, for example:
func main() { var testArray [3]int var numArray = [...]int{1, 2} var cityArray = [...]string{"北京", "上海", "深圳"} fmt.Println(testArray) //[0 0 0] fmt.Println(numArray) //[1 2] fmt.Printf("type of numArray:%T\n", numArray) //type of numArray:[2]int fmt.Println(cityArray) //[北京 上海 深圳] fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string }
Method Three
We can also use the specified index value way to initialize the array, for example:
func main() { a := [...]int{1: 1, 3: 5} fmt.Println(a) // [0 1 0 5] fmt.Printf("type of a:%T\n", a) //type of a:[4]int }
Iterate
A loop through the array has the following two methods:
func main() { var a = [...]string{"北京", "上海", "深圳"} // 方法1:for循环遍历 for i := 0; i < len(a); i++ { fmt.Println(a[i]) } // 方法2:for range遍历 for index, value := range a { fmt.Println(index, value) } }
Multidimensional Arrays
Go language support multidimensional arrays, we are here to two-dimensional array, for example (which is nested array of arrays).
Defined two-dimensional array
func main() { a := [3][2]string{ {"北京", "上海"}, {"广州", "深圳"}, {"成都", "重庆"}, } fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]] fmt.Println(a[2][1]) //支持索引取值:重庆 }
Traversing the two-dimensional array
func main() { a := [3][2]string{ {"北京", "上海"}, {"广州", "深圳"}, {"成都", "重庆"}, } for _, v1 := range a { for _, v2 := range v1 { fmt.Printf("%s\t", v2) } fmt.Println() } }
Output:
北京 上海
广州 深圳
成都 重庆
Note: only the first layer of a multi-dimensional array can be used ...
to allow the compiler to derive the length of the array. E.g:
//支持的写法
a := [...][2]string{ {"北京", "上海"}, {"广州", "深圳"}, {"成都", "重庆"}, } //不支持多维数组的内层使用... b := [3][...]string{ {"北京", "上海"}, {"广州", "深圳"}, {"成都", "重庆"}, }
Array is a value type
An array is a value type, assignment and transfer of participants to replicate the entire array. Therefore, changing the value of copies, it does not change the value itself.
func modifyArray(x [3]int) { x[0] = 100 } func modifyArray2(x [3][2]int) { x[2][0] = 100 } func main() { a := [3]int{10, 20, 30} modifyArray(a) //在modify中修改的是a的副本x fmt.Println(a) //[10 20 30] b := [3][2]int{ {1, 1}, {1, 1}, {1, 1}, } modifyArray2(b) //在modify中修改的是b的副本x fmt.Println(b) //[[1 1] [1 1] [1 1]] }
note:
- Array Support "==", "! =" Operator, because the memory is always initialized.
[n]*T
Represents a pointer array,*[n]T
it represents an array pointer.