Golang 中make与new 区别

makenew

new

new""0nil
panic: assignment to entry in nil map
func main() {
    people := new(map[string]string)
    p := *people
    p["name"] = "Kalan" // panic: assignment to entry in nil map
}

因為初始化的 map 會是 nil map,不像其他的 primitive type 一樣有預設值。

struct&
type Person struct {
  Name string
  Age  int
}

func main() {
    p := &Person{}
    p := new(Person)
}
Person

make

makenew
func main() {
    receiver := make(chan string) // 初始化 channel,但不回傳指標
    person := make(map[string]string)
    people := make([]string, 100) // 初始化長度為 100 的字串陣列
}

還是要再度強調一次,make 不會回傳指標!下面這段程式碼會噴錯:

func main() {
    person := make(map[string]string)
    fmt.Println(*person) // invalid indirect of person
}

結論

makenew

更多閱讀