make 和 new 都可以用来动态分配内存,不过它们的用途略有不同。
new(T) 返回的是一个指向 T 类型零值的指针,即返回一个 T 类型的指针,T 类型的值被初始化为零值(即该类型的默认值)。new 的主要作用是返回一个指针,用于初始化复杂类型(如数组和结构体)的值。
例如:
person := new(Person) // 返回指向 Person 类型零值的指针
person.name = "Tom"
person.age = 20
make(T, args) 是为 slice、map 或 channel 分配内存,并初始化为默认值。make 返回初始化后的 T 类型值。make 很适合用于 slice、map 或 channel,因为这些类型的内部实现需要额外的内存空间来存储数据、结构信息等,而使用 make 可以确保其内部数据结构被正确地初始化。
例如:
slice := make([]int, 10, 20) // 返回一个长度为 10,容量为 20 的 int 类型 slice,每个元素被初始化为零值 0。