作者回复: 非常喜欢你深入学习的精神! * 首先判断,如果新申请容量(cap)大于2倍的旧容量(old.cap),最终容量(newcap)就是新申请的容量(cap) * 否则判断,如果旧切片的长度小于1024,则最终容量(newcap)就是旧容量(old.cap)的两倍,即(newcap=doublecap) * 否则判断,如果旧切片长度大于等于1024,则最终容量(newcap)从旧容量(old.cap)开始循环增加原来的 1/4,即(newcap=old.cap,for {newcap += newcap/4})直到最终容量(newcap)大于等于新申请的容量(cap),即(newcap >= cap) * 如果最终容量(cap)计算值溢出,则最终容量(cap)就是新申请容量(cap)
作者回复: 很好的观察,因为扩容以后,会分配一个更大的空间,则使原有的指针指向了不同的地方。
作者回复: 你细致的学习和通过实践的学习方式太赞了
作者回复: 1. 声明数组或者切片时是要指定类型的 2. 一种变通的方式是通过interface{}类型 S5:= []interface{}{“hello”,1} 可以参加接下来课程里的“空接口和断言”相关部分
作者回复: 我在使用过程中的观察和你一致。非常感谢你的反馈。
作者回复: 按以下检查你的go-plus相关的test设置: Atom->preferences->packages 搜索找到go-plus 在settings中,Test配置中选中 Run with verbose flag setting
作者回复: 赞
作者回复: 长度已知的情况可以用数组。 切片的方便之处主要来自于自动增长,但切片的自动增长会导致内存分配和数据复制,以及未来相关的GC开销。
作者回复: 主要差别是第二种初始化方式,不用你自己算元素个数,在元素较多,或者你修改程序增加元素时更为简便
作者回复: 第一个是数组,第二个是切片。 数组和切片的差别请参考课程相关内容