make 只能使用于slice, map, chan

    example:

    1. package main
    2. type Foo map[string]string
    3. type Bar struct {
    4. thingOne string
    5. thingTwo int
    6. }
    7. func main() {
    8. // OK
    9. y := new(Bar)
    10. (*y).thingOne = "hello"
    11. (*y).thingTwo = 1
    12. // NOT OK
    13. z := make(Bar) // 编译错误:cannot make type Bar
    14. (*z).thingOne = "hello"
    15. (*z).thingTwo = 1
    16. // OK
    17. x := make(Foo)
    18. x["x"] = "goodbye"
    19. x["y"] = "world"
    20. // NOT OK
    21. u := new(Foo)
    22. (*u)["x"] = "goodbye" // 运行时错误!! panic: assignment to entry in nil map
    23. (*u)["y"] = "world"
    24. }

    试图 make() 一个结构体变量,会引发一个编译错误,这还不是太糟糕,但是 new() 一个映射并试图使用数据填充它,将会引发运行时错误! 因为 new(Foo) 返回的是一个指向 nil 的指针,它尚未被分配内存。所以在使用 map 时要特别谨慎。
    引用博文:http://wiki.jikexueyuan.com/project/the-way-to-go/10.2.html