说明一下Golang 中 make 和 new 的区别?

好的,关于 makenew 在 Go 语言中的区别,我来解释一下。

  1. new 函数的作用
    • new(T) 函数会为 T 类型的新项分配零值内存,并返回其地址,即一个 *T 类型的值(指针)。这种方法适用于各种类型,包括基本类型如 intfloatbool 等,以及数组、结构体等。
    • 使用 new 分配的内存被初始化为类型的零值,例如 new(int) 返回的指针指向的值会被初始化为 0。
  2. make 函数的作用
    • make 函数仅用于切片(slice)、映射(map)和通道(channel)的内存分配,并返回一个有初始值(非零值)的 T 类型,而不是 *T
    • 对于切片,make 会分配内存并初始化切片的内部结构,如长度和容量等。
    • 对于映射,make 会初始化映射的结构。
    • 对于通道,make 会配置通道的缓冲大小。
  3. 应用场景与例子
    • 使用 new
      • 当你需要一个指向某基本类型零值的指针时,比如在需要在函数间共享或者更改数据时。
      • 例子:num := new(int) 创建了一个指向整数的指针,其值初始化为 0。
    • 使用 make
      • 创建切片、映射或通道时,并且需要它们立即可用,例如要在切片中存储数据,或者在映射中设置键值对。
      • 例子:s := make([]int, 10) 创建了一个长度和容量都是 10 的整数切片。

总结:newmake 都是用于分配内存,但 new 返回的是指针,且适用于所有类型,而 make 只用于切片、映射和通道,并返回一个初始化的(非零值的)类型实例。

发表评论

后才能评论