1. 數(shù)組Array
- 數(shù)組:是同一種數(shù)據(jù)類型的固定長(zhǎng)度的序列。
- 數(shù)組定義:var a [len]int,比如:var a [5]int,數(shù)組長(zhǎng)度必須是常量,且是類型的組成部分。一旦定義,長(zhǎng)度不能變。
- 長(zhǎng)度是數(shù)組類型的一部分,因此,var a[5] int和var a[10]int是不同的類型。
- 數(shù)組可以通過(guò)下標(biāo)進(jìn)行訪問(wèn),下標(biāo)是從0開(kāi)始,最后一個(gè)元素下標(biāo)是:len-1
for i := 0; i < len(a); i++ {
}
for index, v := range a {
} - 訪問(wèn)越界,如果下標(biāo)在數(shù)組合法范圍之外,則觸發(fā)訪問(wèn)越界,會(huì)panic
- 數(shù)組是值類型,賦值和傳參會(huì)復(fù)制整個(gè)數(shù)組,而不是指針。因此改變副本的值,不會(huì)改變本身的值。
7.支持 “==”、”!=” 操作符,因?yàn)閮?nèi)存總是被初始化過(guò)的。
8.指針數(shù)組 [n]T,數(shù)組指針 [n]T。
2.數(shù)組切片Slice
- 需要說(shuō)明,slice 并不是數(shù)組或數(shù)組指針。它通過(guò)內(nèi)部指針和相關(guān)屬性引用數(shù)組片段,以實(shí)現(xiàn)變長(zhǎng)方案
- 切片:切片是數(shù)組的一個(gè)引用,因此切片是引用類型。但自身是結(jié)構(gòu)體,值拷貝傳遞。
- 切片的長(zhǎng)度可以改變,因此,切片是一個(gè)可變的數(shù)組。
- 切片遍歷方式和數(shù)組一樣,可以用len()求長(zhǎng)度。表示可用元素?cái)?shù)量,讀寫操作不能超過(guò)該限制。
- cap可以求出slice最大擴(kuò)張容量,不能超出數(shù)組限制。0 <= len(slice) <= len(array),其中array是slice引用的數(shù)組。
- 切片的定義:var 變量名 []類型,比如 var str []string var arr []int。
- 如果 slice == nil,那么 len、cap 結(jié)果都等于 0。


代碼塊
package main
import (
"fmt"
)
// 全局變量
var arr = [...] int {0,1,2,3,4,5,6,7} // 不限定數(shù)組長(zhǎng)度
var arr1 = [5] int {} // 限定數(shù)組長(zhǎng)度為5
func main() {
// 數(shù)組切片
splice0 := arr[:] // 獲得下標(biāo)0到-1所有的值
fmt.Printf("打印值:%v\n", splice0)
splice1 := arr[5:] // 獲得下標(biāo)5到-1所有的值
fmt.Printf("打印值:%v\n", splice1)
splice2 := arr[3:5] // 獲得下標(biāo)3到4所有的值
fmt.Printf("打印值:%v\n", splice2)
splice3 := arr[:len(arr)-1] // 去掉數(shù)組最后一個(gè)值
fmt.Printf("打印值:%v\n", splice3)
splice4 := arr[len(arr)-2:] // 獲得數(shù)組最后兩個(gè)個(gè)值
fmt.Printf("打印值:%v\n", splice4)
// 打印數(shù)組限定數(shù)組
fmt.Printf("限定數(shù)組長(zhǎng)度:%d", len(arr1))
}