数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
定义方式:
~~~
var variable_name [SIZE] variable_type
~~~
## 一、基础用法
~~~
package main
import (
"fmt"
)
func main() {
var arr1 [5]int32
var arr2 [5]int32 = [5]int32{1, 2, 3, 4, 5}
arr3 := [5]string{"a", "b", "c", "d", "e"}
arr4 := [...]string{"h", "i", "j", "k", "l"}
arr5 := [4][4]int32{{1}, {1, 2}, {1, 2, 3}}
fmt.Println("arr1:", arr1)
fmt.Println("arr2:", arr2)
fmt.Println("arr3:", arr3)
fmt.Println("arr4:", arr4)
fmt.Println("arr5:", arr5)
}
~~~
结果:
~~~
arr1: [0 0 0 0 0]
arr2: [1 2 3 4 5]
arr3: [a b c d e]
arr4: [h i j k l]
arr5: [[1 0 0 0] [1 2 0 0] [1 2 3 0] [0 0 0 0]]
~~~
**注意:如果数组元素不够的话,会自动补0**
另外元素数量大于定义长度,则会报错
~~~
arr6 := [5]string{"a", "b", "c", "d", "e", "f"}
~~~
错误:array index 5 out of bounds [0:5]
## 二、len()获取数组长度
~~~
fmt.Println(len(arr3)) // 5
~~~
## 三、cap()获取数组容量
~~~
fmt.Println(cap(arr3)) // 5
~~~
由于go的内部处理机制(自动补0),使得**len和cap的结果是一样的**。
## 四、循环数组
~~~
for i, v := range arr3 {
fmt.Println(i, v)
}
~~~
结果:
~~~
0 a
1 b
2 c
3 d
4 e
~~~
## 五、字节数组 []byte
```
package main
import "fmt"
func main() {
b1 := []byte{1, 2, 3}
fmt.Println(b1)
b2 := []byte("hello") // 字符返回的的是ASCII码,JS:'h'.charCodeAt() 是104
fmt.Println(b2)
}
```
结果:
```
[1 2 3]
[104 101 108 108 111]
```
## 六、扩展操作符(...)
```
package main
import "fmt"
func foo(args ...string) {
for _, v := range args {
fmt.Println(v)
}
}
func main() {
var str = []string{
"hello",
"world",
"!",
}
foo(str...)
}
```