Golang的slice为何一定要len和cap二者
2018-09-14 本文已影响78人
空即是色即是色即是空
问题
- 始终觉得slice的定义只需要len即可,cap有什么好处呢?
答案
- cap主要是为了让slice提供可变长度。
试想,如果没有cap,只有len。
sliceA长度为10,len=10,已经插满元素;现在要插入第十一个元素。- 做法
sliceA的长度扩展为20,len=20,此时有用元素为11个,还有9个空位。
sliceA对外界暴露出来的接口只有ptr和len=20,此时如果需要再插入一个元素。
到底sliceA应该扩展呢还是可以继续在原来的基础直接插入呢,同时应该从哪个index插入呢?
这些问题在有了len和cap的组合之后就可以迎刃而解了。
- 做法