golang的切片是值类型还是引用类型?

go的切片
在某些场景下表现为引用类型: 比如可以将一个切片传入函数,在函数里修改切片的值,函数外部是能感知到的。
在某些情况下表现为值类型,比如 将切片传入函数,在函数里对切片新增值。函数外部是感知不到的。
可能的解释:
单纯的修改值,并不发生扩容。而对切片进行新增值,触发了扩容,导致地址变更。

那么如果提前将切片扩容后,再传入函数进行新增值,新增值不会触发扩容,此时函数外部能感知到吗?

所以切片究竟是值类型还是引用类型?
全部评论
golang理论上全都是值引用,之所以修改值传递的切片会改变原切片是因为切片的底层实现,是一个指针
点赞 回复 分享
发布于 2024-08-26 21:19 上海
说到底是个结构体类型 看看源码呗 这玩意儿源码很简单
点赞 回复 分享
发布于 2024-08-26 19:03 北京
点赞 回复 分享
发布于 2024-08-26 09:21 北京
切片是值传递的吧,你说的表现为引用类型,那是因为传的副本和原切片使用的是同一个底层数组,所以修改切片的值也就改变了底层数组的值,原切片的值也就改变了
点赞 回复 分享
发布于 2024-08-25 21:34 俄罗斯

相关推荐

点赞 评论 收藏
分享
07-15 11:41
门头沟学院 Java
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务