這條規則就是我對 Go 中 slice 的了解當元素的數量和容量的寬度相同時(len(fruits) == cap(fruits)),append() 產生的新元素就是新的引用。當元素個數小于容量(len(fruits) < cap(fruits))時,新元素被放入容量范圍內,導致所有其他具有相同引用的切片元素值發生變化。我有這樣的代碼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條經驗 獲得超4個贊
以下是代碼的工作原理:
就在附加papaya
到之前fruits
,
fruits = {"banana", "mango", "tomato"}
并newFruits
指向與 相同fruits
但從 開始的數組mango
。
當您追加papaya
到時fruits
,將創建一個容量=6 的新數組,因為 的容量fruits
為 3。fruits
現在指向這個新數組,具有 4 個值:
fruits = {"banana", "mango", "tomato", "papaya"}
newFruits
仍然指向舊fruits
數組,并包含 2 個元素。
- 1 回答
- 0 關注
- 104 瀏覽
添加回答
舉報
0/150
提交
取消