作者回复: 非常喜欢你深入学习的精神!
* 首先判断,如果新申请容量(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)
作者回复: 很好的观察,因为扩容以后,会分配一个更大的空间,则使原有的指针指向了不同的地方。
作者回复: 按以下检查你的go-plus相关的test设置:
Atom->preferences->packages
搜索找到go-plus
在settings中,Test配置中选中 Run with verbose flag setting
作者回复: 接下来把重点放在并发编程。另外,系统设计方面也很重要。推荐学习设计模式,架构模式等。接下来的课程也会有相关内容
作者回复: 你细致的学习和通过实践的学习方式太赞了
作者回复: 是这样的。不过最重要的还是理解不同语言的设计的初衷及较之其他语言的不同特性,而不是在翻译不同的语言。
作者回复: 长度已知的情况可以用数组。
切片的方便之处主要来自于自动增长,但切片的自动增长会导致内存分配和数据复制,以及未来相关的GC开销。
作者回复: 1. 声明数组或者切片时是要指定类型的
2. 一种变通的方式是通过interface{}类型
S5:= []interface{}{“hello”,1} 可以参加接下来课程里的“空接口和断言”相关部分
作者回复: 主要差别是第二种初始化方式,不用你自己算元素个数,在元素较多,或者你修改程序增加元素时更为简便
作者回复: go test -v xxx_test.go
作者回复: 赞