數組是具有相同唯一類型的一組已編號且長度固定的數據項序列,這種類型可以是任意的原始類型例如整形、字符串或者自定義類型。
定義方式:
~~~
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...)
}
```