Golang Array和以往認知的數組有很大不同。有點像Python中的列表
1. 數組:是同一種數據類型的固定長度的序列。
2. 數組定義:var a [len]int,比如:var a [5]int,數組長度必須是常量,且是類型的組成部分。一旦定義,長度不能變。
3. 長度是數組類型的一部分,因此,var a[5] int和var a[10]int是不同的類型。
4. 數組可以通過下標進行訪問,下標是從0開始,最后一個元素下標是:len-1
5. 訪問越界,如果下標在數組合法范圍之外,則觸發訪問越界,會panic
6. 數組是值類型,賦值和傳參會復制整個數組,而不是指針。因此改變副本的值,不會改變本身的值。
7.支持 "=="、"!=" 操作符,因為內存總是被初始化過的。
8.指針數組 [n]*T,數組指針 *[n]T。
for i := 0; i < len(a); i++ {}for index, v := range a {}
1.1 數組初始化:
全局:
var arr0 [5]int = [5]int{1, 2, 3}
var arr1 = [5]int{1, 2, 3, 4, 5}
var arr2 = [...]int{1, 2, 3, 4, 5, 6}
var str = [5]string{3: "hello world", 4: "tom"}
局部:
a := [3]int{1, 2} // 未初始化元素值為 0。
b := [...]int{1, 2, 3, 4} // 通過初始化值確定數組長度。
c := [5]int{2: 100, 4: 200} // 使用索引號初始化元素。
d := [...]struct {name stringage uint8
}{{"user1", 10}, // 可省略元素類型。{"user2", 20}, // 別忘了最后一行的逗號。
}
1.2 多維數組
// 全局var arr0 [5][3]intvar arr1 [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}}// 局部:a := [2][3]int{{1, 2, 3}, {4, 5, 6}}b := [...][2]int{{1, 1}, {2, 2}, {3, 3}} // 第 2 緯度不能用 "..."。
示例代碼
package mainimport ("fmt"
)var arr0 [5][3]int
var arr1 [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}}func main() {a := [2][3]int{{1, 2, 3}, {4, 5, 6}}b := [...][2]int{{1, 1}, {2, 2}, {3, 3}} // 第 2 緯度不能用 "..."。fmt.Println(arr0, arr1)fmt.Println(a, b)
}
1.3 數組拷貝和傳參
func printArr(arr *[5]int) {arr[0] = 10for i, v := range arr {fmt.Println(i, v)}
}func main() {arr1 := [5]int{1, 2, 3, 4}printArr(&arr1)var arr [5]intprintArr(&arr)
}