docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v "E:/docker/rabbitmq:/var/lib/rabbitmq" rabbitmq:4-management
指向底层数组的指针
指向hmap结构体的指针
切片在函数中操作的特性
切片传递函数中,函数外的原切片会保留独立的底层引用的数组和长度和容量。
修改切片元素
切片是引用类型,会把底层数组的指针传递进去
底层数组被修改了 ①修改指针的引用;②append()函数触发扩容不会影响原切片
函数外的原切片会保留独立的底层引用的数组和长度和容量。
切片在函数中append()后新增的元素是看不到的
函数外的原切片会保留独立的底层引用的数组和长度和容量。
操作类型 | 是否影响原切片 | 原因 |
---|---|---|
修改切片元素(如 s[i]=x ) |
是 | 底层数组共享,修改元素直接同步到原数组。 |
截取子切片(如 s[1:] ) |
否 | 函数内切片变量指向原数组的新位置,但原切片的 ptr 、len 、cap 未改变。 |
append 未扩容 |
否 | 原切片的 len 未修改,无法访问新增元素;底层数组可能被覆盖但原切片无感知。 |
append 触发扩容 |
否 | 函数内切片指向新数组,原切片仍指向旧数组。 |
重新赋值切片变量(如 s = anotherSlice ) |
否 | 函数内切片变量指向新内存,原切片不受影响。 |
操作类型 | 是否影响原 map | 原因 |
---|---|---|
修改 map 内容(增删改键值对) | 是 | 函数内外 map 共享底层 hmap 结构,修改直接同步。 |
重新赋值 map 变量(指向新 map) | 否 | 函数内 map 变量指向新的 hmap 指针,原 map 的指针未改变。 |
传递 nil map 并修改内容 | 触发 panic | nil map 未初始化,无法直接操作。 |