這條規(guī)則就是我對 Go 中 slice 的了解當元素的數(shù)量和容量的寬度相同時(len(fruits) == cap(fruits)),append() 產(chǎn)生的新元素就是新的引用。當元素個數(shù)小于容量(len(fruits) < cap(fruits))時,新元素被放入容量范圍內(nèi),導(dǎo)致所有其他具有相同引用的切片元素值發(fā)生變化。我有這樣的代碼package mainimport ( "fmt")func main() { //declare slice var fruits = []string{"banana", "mango", "tomato"} //using two index technique to make slice var newFruits = fruits[1:2] //append element to fruits slice fruits = append(fruits, "papaya") //append element to newFruits slice newFruits = append(newFruits, "dragon") fmt.Println(cap(fruits)) //2 fmt.Println(cap(newFruits)) //6 fmt.Println(newFruits) //[mango dragon] fmt.Println(fruits) //[banana mango tomato papaya] }為什么水果的價值不是【香蕉芒果龍木瓜】?
1 回答

繁華開滿天機
TA貢獻1816條經(jīng)驗 獲得超4個贊
以下是代碼的工作原理:
就在附加papaya
到之前fruits
,
fruits = {"banana", "mango", "tomato"}
并newFruits
指向與 相同fruits
但從 開始的數(shù)組mango
。
當您追加papaya
到時fruits
,將創(chuàng)建一個容量=6 的新數(shù)組,因為 的容量fruits
為 3。fruits
現(xiàn)在指向這個新數(shù)組,具有 4 個值:
fruits = {"banana", "mango", "tomato", "papaya"}
newFruits
仍然指向舊fruits
數(shù)組,并包含 2 個元素。
- 1 回答
- 0 關(guān)注
- 103 瀏覽
添加回答
舉報
0/150
提交
取消