cap是在初始化切片是生成的容量 。
发现切片的结构体是数组的地址指针array unsafe.Pointer,而Go中数组的地址代表数组结构体的地址 。
slice 中得到一块内存地址 , array[0]或者unsafe.Pointer(array[0]) 。
也可以通过地址构造切片
nil切片:指的unsafe.Pointer 为nil
空切片:
创建的指针不为空 , len和cap为空
当一个切片的容量满了,就需要扩容了 。怎么扩 , 策略是什么?
如果原来数组切片的容量已经达到了最大值,再想扩容,Go 默认会先开一片内存区域,把原来的值拷贝过来 , 然后再执行 append() 操作 。这种情况对现数组的地址和原数组地址不相同 。
从上面结果我们可以看到,如果用 range 的方式去遍历一个切片 , 拿到的 Value 其实是切片里面的值拷贝,即浅拷贝 。所以每次打印 Value 的地址都不变 。
由于 Value 是值拷贝的 , 并非引用传递,所以直接改 Value 是达不到更改原切片值的目的的,需要通过 slice[index] 获取真实的地址 。
【go语言用数组转换 go语言 数组】go语言用数组转换的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于go语言 数组、go语言用数组转换的信息别忘了在本站进行查找喔 。
推荐阅读
- 微信视频号怎么用流量看,微信视频号如何有流量
- asp.net网页下载,aspnet webpage
- 海南高职公众号注册,海南高级职业技术学校
- 如何抓住新媒体趋势,如何抓住新媒体趋势发展
- 如何精通go语言 go语言快速入门
- linux关闭防火前命令,linux系统中关闭防火墙命令
- 华为nova5ipro鸿蒙系统刷机教程,华为nove5pro刷机包
- php获取谷歌分析数据 phpdesktop chrome 怎么用
- cpu12代有什么特点,十二代cpu参数