Golang learning 2 -- collection

November 13, 2017

Slice

一个slice会包含三个信息:capacity, length还有一个指向数组头部的pointer。 length must be less then capacity.
len() to check the length, cap() to check the capacity of a slice. Let us see an example first to have some intuition:

x := make([]int, 5, 10) // [0 0 0 0 0]
x := x[:10] // [0 0 0 0 0 0 0 0 0 0]
x[:12] // panic: runtime error: slice bounds out of range

From the code above, we can see that capacity is basically the golang solution for dynamic memory allocation. The code below illustrate that:

初始化一个map

在go里面,map实际上是hashtable的reference,因此很多hashtable的特性他都具备。go里面的key是唯一的,因此可以作为set来使用。

m := make(map[string] int)

也可以写成

m := map[string] int{}

这是初始化一个empty的map,如果要初始化值,可以在大括号中加入dictionary的key/value。值得注意的是,map并不像普通的array那样,可以用&符号来取得其地址,因为每次加入一个元素的时候都会rehash,所以地址一直在变的。

Reference