Go中new和make的区别

东白随记
0 评论
/ /
0 阅读
/
832 字
15 2021-04

在Go语言中,`new`和`make`都是用于内存分配的内置函数,但它们的使用场景和目的有所不同。

1. `new`函数:

`new`函数用于为指针类型分配内存。当你使用`new`函数时,它会返回一个指向新分配的零值对象的指针。`new`的主要用途是分配内存并为该类型的零值初始化。它的语法如下:

```go

p := new(T)

```

这里,`T`是一个类型,`p`是一个指向该类型的新分配的内存的指针。这个新分配的内存将被初始化为该类型的零值。例如,对于整数类型,它将初始化为0;对于字符串类型,它将是一个空字符串等。

2. `make`函数:

与`new`不同,`make`函数主要用于创建像切片(slices)、映射(maps)和通道(channels)这样的引用类型。这些类型在Go语言中需要特殊的初始化过程。`make`函数不仅分配了内存,还进行了必要的初始化工作,使其成为可用的数据结构。它的语法如下:

```go

s := make(T, size)

```

这里,`T`是切片、映射或通道的类型,`size`是相应的尺寸或容量参数(根据具体情况而定)。`make`将返回一个已初始化的`T`类型的实例。对于切片,它会返回一个具有特定长度的切片,其中包含指定数量的元素(如果适用);对于映射,它将返回一个空的映射;对于通道,它将返回一个具有特定缓冲大小的通道。

总结一下,`new`和`make`的主要区别在于它们的使用场景和目的。`new`主要用于为指针类型分配内存并初始化为零值,而`make`则用于创建复杂的引用类型,并执行必要的初始化工作。