new
只接受一个参数,这个参数是一个类型,分配好内存后,返回一个指向该类型内存地址的指针。同时请注意它同时把分配的内存置为零,也就是类型的零值。
package main
import (
"fmt"
"sync"
)
type people struct {
m sync.Mutex
name string
age int
sex string
}
func main() {
zzt := new(people) //默认给u分配到内存全部为0
zzt.m.Lock()
zzt.name = "zzt"
zzt.age = 22
zzt.m.Unlock()
fmt.Printf("%v \n %T \n", zzt, zzt)
}
&{{0 0} zzt 22 }
*main.people
make
make用于内存分配,且只适用于:
chan
map
slice
它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型。
且这三种类型是引用类型,所以必须要初始化
make与new的异同
相同
堆空间分配
不同
make: 只用于slice、map以及channel的初始化, 无可替代
new: 用于类型内存分配(初始化值为0), 不常用