Go 语言中 new 和 make 的区别#
new用于分配类型 T 所需的内存,并将其初始化为零值;make用于分配内存和初始化成员结构。new的入参类型为任意类型;make的入参类型为slice、map和channel。new的返回值类型为指针;make的返回值类型为入参类型。
package main
import (
"fmt"
"reflect"
)
func printType(obj any) {
fmt.Println(reflect.TypeOf(obj))
}
func main() {
printType(new(int)) // *int
printType(new(bool)) // *bool
printType(new(string)) // *string
printType(make([]int, 3)) // []int
printType(make(map[int]int)) // map[int]int
printType(make(chan int)) // chan int
}