append用完后就直接删除mysql元素了吗?
myslice := append(courseSlice[:2], courseSlice[3:]...)这句执行后,courseSlice的值也发生变化,courseSlice的值变成["go", "grpc", "es", "gin"]吗?

正在回答 回答被采纳积分+1
为什么 courseSlice 可能会被修改?
append(courseSlice[:2], courseSlice[3:]...) 的执行步骤如下:
courseSlice[:2]→["go", "grpc"]courseSlice[3:]→["es", "gin"]append(courseSlice[:2], courseSlice[3:]...)→["go", "grpc"] + ["es", "gin"] = ["go", "grpc", "es", "gin"]myslice指向courseSlice的底层数组(可能和courseSlice共享底层数组)。如果
append发生在courseSlice的原始容量范围内,则courseSlice的底层数组也会被修改。
因此,如果 courseSlice 的底层数组没有被 append 重新分配(容量足够),那么 myslice 和 courseSlice 仍然共享相同的底层数组,此时 courseSlice 也会变成 ["go", "grpc", "es", "gin"],因为 append 直接修改了原数组的内容。
你上面的append地方修改了c的值 下面是append的源码 你可以看一下
func append(s []T, vs ...T) []T {
// 获取切片的长度和容量
n := len(s)
m := n + len(vs)
// 如果容量不够,就扩容
if m > cap(s) {
newcap := m
if newcap < 2*cap(s) {
newcap = 2 * cap(s)
}
newslice := make([]T, m, newcap)
copy(newslice, s)
s = newslice
}
return s[:m]
}- 参与学习 526 人
- 解答问题 606 个
风口上的技术,薪资水平遥遥领先,现在学习正值红利期! 未来3-5年,Go语言势必成为企业高性能项目中不可替代的语言 从基础到项目实战再到重构,对转行人员友好,真正从入门到精通!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星