这条规则就是我对 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 关注
- 79 浏览
添加回答
举报
0/150
提交
取消