2 回答

TA贡献1844条经验 获得超8个赞
当您将所有事物视为一个值时,规则就相当简单,其中一些值在内部包含指针。
slices:当您可能需要修改长度或容量时使用指针,这会更改切片的值。
maps:不要使用指针,因为地图值不会随着修改而改变。
函数和方法:不要使用指针,通过函数值也有同样的效果。
陈:不要使用指针。
当然也有例外,例如如果您希望能够完全换出地图,则需要使用指针来实现,但这些情况很少见。

TA贡献1784条经验 获得超2个赞
“值类型”和“引用类型”之间并没有真正的二分法。“引用类型”仅用于描述其“值”完全由单个指针组成的值类型。
这适用于映射和通道类型,它们基本上是指向内部结构的指针类型。但这对切片来说并不完全正确,因为切片是一种复合类型(基本上是一个结构),由两个整数值(长度和容量)和一个指针(指向元素)组成。因此,对于通过指针访问的元素而言,它是一种“引用类型”,但对于长度和容量而言,它是一种“值类型”。
追加到切片操作的是它的长度和潜在的容量,因此它需要更改切片的“值”,而原地分配元素只使用指针,因此不需要更改切片的“值” . 如果您希望将指针更改为指向与另一个切片相同的指针(您可以通过分配给切片来实现),您可能还需要更改切片的“值”。
它与“参考类型”、地图和通道类似。更改地图或通道的“内容”(在指针指向的内容中)不需要更改地图或通道的“值”。但是,如果您想更改指针以指向不同的底层映射或通道,那么您将更改映射或通道变量的“值”。
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报