golang之内存管理make
介绍
读《network programming with golang》这本书,墙裂推荐。读这本书之前我并没有系统的学过这门语言。读到第十章,Dictionary内存分配的代码让我觉得有些困惑,为什么一个定义长度为100的数组不会越界
问题
书中代码如下
v := make([]*Entry, 0, 100)
for n := 0; n < len(d.Entries); n++ {
de := d.Entries[n]
if de.Pinyin == py {
v = append(v, de)
}
}
这段代码,看起来就是在最初创建了一个长度为100的数组,而后不断的通过append给它添加新的元素。添加多少个元素是不确定的,那么如果添加101个元素,会不会index of range呢?
实验
带着这个问题我做了如下实验。实验代码如下
package main
import "fmt"
func main(){
array := make([]int, 0, 10)
// 越界错误: index out of range
//array[0] = 1
// ok 可以访问
array = array[0:1]
array[0] = 1
// 越界错误: in...