原文翻譯: https://go.dev/blog/slices-intro
介紹
go語(yǔ)言的slice類型提供一種方便快捷的數(shù)據(jù)類型。切片類似于其他語(yǔ)言的數(shù)組, 但也有些不同的屬性。接下來(lái)會(huì)介紹什么是 slice 并且如何使用。
數(shù)組
切片類型是構(gòu)建于數(shù)組類型之上的,所以理解切片之前必須先理解數(shù)組。
一個(gè)數(shù)組類型的定義有長(zhǎng)度和元素類型。例如
[4]int
相當(dāng)與一個(gè)數(shù)組有 4 個(gè) int 類型。數(shù)組的長(zhǎng)度是固定;數(shù)組長(zhǎng)度的一部分是數(shù)組的類型([4]int and [5]int 是沖突的不同類型)。數(shù)組可以通過(guò)索引獲取元素,例如
s[n]
可以獲取到第 n 個(gè)元素,當(dāng)然索引是從零開始;
var a [4]int
a[0] = 1
i := a[0] // i == 1
數(shù)組不需要顯示的初始化;每個(gè)元素都是對(duì)應(yīng)類型的零值
// a[2] == 0, the zero value of the int type
[4]int 是 4 個(gè) int 值,在內(nèi)存中是連續(xù)空間

數(shù)組是一組 value 組成。一個(gè)數(shù)組變量表示一個(gè)全部的數(shù)組;它不是指向第一個(gè)數(shù)組元素的指針(就像 C 中的情況一樣)。這就意味著當(dāng)你賦值或傳遞的數(shù)組都是內(nèi)容拷貝。(傳遞一個(gè)指針數(shù)組可以避免內(nèi)容拷貝,但是那是一個(gè)指針,不是數(shù)組)。一個(gè)思路是數(shù)組是固定長(zhǎng)度復(fù)合類型且有索引的短結(jié)構(gòu)體而不是命名字段。
字面表達(dá),例如:
b := [2]string{"Penn", "Teller"}
或者用編譯器計(jì)算元素總數(shù):
b := [...]string{"Penn", "Teller"}
這兩個(gè)方式,變量b 都表示 [2]string
完(上半部)