Go new 和 make 的区别
在 Go 语言中,new 和 make 都用于分配内存,但它们的用途和行为有所不同。
new
用途:
new用于为值类型(如结构体、整数、数组等)分配内存,并返回指向该类型的指针。行为:
new(T)会分配一个类型为T的零值内存,并返回其指针(即*T)。
示例:
p := new(int) // p 是一个 *int 类型的指针,指向一个零值的 int
fmt.Println(*p) // 输出 0make
用途:
make用于为引用类型(如切片、映射、通道)分配内存并初始化。行为:
make不仅分配内存,还会初始化数据结构(如设置切片的长度和容量、初始化映射等)。
示例:
s := make([]int, 10) // 创建一个长度为 10 的切片
m := make(map[string]int) // 创建一个空的映射
ch := make(chan int) // 创建一个无缓冲的通道主要区别
适用类型:
new适用于值类型。make适用于引用类型(切片、映射、通道)。
返回值:
new返回指针。make返回初始化后的引用类型。
初始化:
new只分配内存并返回零值的指针。make分配内存并初始化数据结构。
总结
使用
new来分配值类型的内存并获取指针。使用
make来分配并初始化引用类型的内存。
License:
CC BY 4.0