陣列 (Array)
陣列是零或多個特定型別元素的固定長度序列。由於他們是固定長度,比較少直接使用。
基礎使用
var a [3]int // 三個整數的陣列
fmt.Println(a[0]) // 輸出第一個元素
fmt.Println(a[len(a)-1]) // 輸出最後一個元素
新陣列變數以元素型別的零值初始化,對 int 來說是 0 。
var r [3]int = [3]int{1, 2}
fmt.Println(r[2]) // 0
陣列長度可以使用 … 來取代,但會依初始化長度來決定。
q := [...]int{1, 2, 3}
fmt.Printf("%T\n", q) // "[3]int"
陣列的大小也是型別的一部份
q := [3]int {1, 2, 3}
q = [4]int {1, 2, 3, 4}
// 編譯錯誤
陣列也可以指定成 key map 型態
type Currency int
const (
USD Currency = iota
EUR
GBP
RMB
)
symbol := [...]string{USD: "$", EUR: "€", GBP: "£", RMB: "¥"}
fmt.Println(RMB, symbol[RMB]) // 3 ¥
如果陣列中的元素是可比較的,那該陣列就是可比較的。我們可以使用 == 來比較兩個陣列(它會回報陣列內的元素是否皆相同)
a := [2]int{1, 2}
b := [...]int{1, 2}
c := [2]int{1,3}
fmt.Println(a==b, a==c, b==c) // "true false, false"
d := [3]int{1, 2}
fmt.Println(a == b) // 編譯錯誤
在 Go 中,呼叫函式(function)時,每個參數值的拷貝被指派給相對應的參數變數,因此函式接收到的是複製品而不是來源。
p := [2]int{1, 2}
func zero(intArray [2]int){
for i := range intArray {
intArray[i] = 0
}
}
zero(p)
fmt.Println(p)
// [1, 2]
所以在 Golang 中我們通常這樣使用
p := [2]int{1, 2}
func zero(intArray *[2]int){
for i := range intArray {
intArray[i] = 0
}
}
zero(&p)
fmt.Println(p)
// [0, 0]