Go new 和 make 的区别
在 Go 语言中,new
和 make
都用于分配内存,但它们的用途和行为有所不同。
new
用途:
new
用于为值类型(如结构体、整数、数组等)分配内存,并返回指向该类型的指针。行为:
new(T)
会分配一个类型为T
的零值内存,并返回其指针(即*T
)。
示例:
p := new(int) // p 是一个 *int 类型的指针,指向一个零值的 int
fmt.Println(*p) // 输出 0
make
用途:
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