3 回答

TA貢獻1804條經驗 獲得超3個贊
使用append()內置
例子:
type mytype struct {
a, b int
}
func main() {
a := []mytype{mytype{1, 2}, mytype{3, 4}}
a = append(a, mytype{5, 6})
}

TA貢獻1804條經驗 獲得超2個贊
Go Slice包含三個元素:數據,長度和容量。
s := make([]int, 0, 10)
變量s是一個整數切片,其長度為0,容量為10。內置的len()和cap()函數允許您獲取切片的長度和容量:
len(s) == 0
cap(s) == 10
要增加切片的長度,只需重新切片:
s = s[0:5]
// len(s) == 5
// cap(s) == 10
要減少長度,可以采用子切片:
s = s[0:1]
// len(s) == 1
有一些較短的方法可以調用make():
a := make([]int, 10)
// len(a) == cap(a) == 10
b := make([]int)
// len(b) == cap(b) == 0
一切都很好,但是如果您需要將切片的長度增加到超出其容量,該怎么辦?為此,您需要分配一個新的片并將舊片的內容復制到新的片上。(函數“ copy”是另一個內置函數。)
t := make([]int, len(s), 20)
copy(t, s)
在有效圍棋文檔需要這個例子有點進一步,實現一個附加功能追加一個切片到另一個,調整其大小,如果必要的。
切片由數組支持;當make()一片特定容量的切片時,該容量的數組將在后臺分配。切片實際上成為該數組的“智能指針”。如果將該切片(或該切片的子切片)傳遞給另一個函數,則它將作為指向同一數組的指針傳遞。這使得子切片的創建非常便宜-昂貴的是后備陣列的分配。
Go標準庫包含許多容器軟件包(例如vector),從而無需手動管理切片。使用切片可以提高速度,而使用更精細的容器類可以更加方便。(也就是說,大多數情況下我仍然使用切片。)
您可能想知道為什么需要處理所有這些麻煩。畢竟,許多語言都提供動態調整大小的數組作為基元。這樣做的原因與Go的哲學息息相關。語言設計人員不會假定您知道適合您的程序的分配策略是什么;相反,它們為您提供了構建自己的數據結構所需的工具。
- 3 回答
- 0 關注
- 445 瀏覽
添加回答
舉報