make 只能使用于slice, map, chan
example:
package maintype Foo map[string]stringtype Bar struct {thingOne stringthingTwo int}func main() {// OKy := new(Bar)(*y).thingOne = "hello"(*y).thingTwo = 1// NOT OKz := make(Bar) // 编译错误:cannot make type Bar(*z).thingOne = "hello"(*z).thingTwo = 1// OKx := make(Foo)x["x"] = "goodbye"x["y"] = "world"// NOT OKu := new(Foo)(*u)["x"] = "goodbye" // 运行时错误!! panic: assignment to entry in nil map(*u)["y"] = "world"}
试图 make() 一个结构体变量,会引发一个编译错误,这还不是太糟糕,但是 new() 一个映射并试图使用数据填充它,将会引发运行时错误! 因为 new(Foo) 返回的是一个指向 nil 的指针,它尚未被分配内存。所以在使用 map 时要特别谨慎。
引用博文:http://wiki.jikexueyuan.com/project/the-way-to-go/10.2.html
