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