golang中new跟make有啥区别

发布时间:2024-07-05 00:11:20

Golang中new跟make的区别

在Golang中,new和make是两个重要的内置函数,用于在程序中创建并分配各种类型的变量和数据结构。虽然它们的作用相似,但在使用时需要注意它们的区别。下面将详细介绍new和make的区别。

new函数

new是一种用于分配内存的函数,在Golang中主要用于创建指针类型的变量。当我们使用new函数进行内存分配时,会返回一个指向被分配类型的指针值。下面是使用new函数的示例:

``` func main() { var ptr *int ptr = new(int) *ptr = 10 fmt.Println(*ptr) } ```

在上面的例子中,我们使用new函数分配了一个int类型的内存,并将其赋值给指针变量ptr。然后,我们可以通过解引用指针来改变或读取变量的值。

make函数

make是一种用于创造切片、映射和通道等动态数据结构的函数。与new函数不同,make函数返回的类型不是指针,而是切片、映射或通道本身。下面是使用make函数创建切片的示例:

``` func main() { var slice []int slice = make([]int, 5, 10) fmt.Println(len(slice)) fmt.Println(cap(slice)) } ```

在上面的例子中,我们使用make函数创建了一个长度为5、容量为10的切片。通过len和cap函数,我们可以分别获取切片的长度和容量。

new和make的不同之处

下面是new和make之间的一些关键区别:

1. 返回类型

new函数返回指针类型,而make函数返回非指针类型。这意味着使用new函数得到的变量需要通过解引用指针来改变或读取其值,而使用make函数创建的变量则可以直接进行读写操作。

2. 使用场景

new函数主要用于创建结构体、数组和基本类型(如int、float64等)的指针。它适合于需要在堆上分配内存的情况,例如在函数调用之间传递指针。

而make函数主要用于创建切片、映射和通道等动态数据结构。它会在运行时进行内部初始化,并返回一个可直接使用的数据结构。

3. 参数

new函数只接受一个参数,即需要分配内存的类型。它会初始化分配的内存,将所有位设置为零值,并返回一个指向新分配的内存的指针。

而make函数接受多个参数,具体参数根据创建的数据结构类型而变化。例如,创建切片时,make函数需要指定长度和容量的参数。

总结

在Golang中,new函数用于分配内存并返回指针类型的变量,适用于创建结构体、数组和基本类型的指针。而make函数用于创建切片、映射和通道等动态数据结构,返回非指针类型的变量,并且会在运行时进行初始化。根据不同的使用场景,选择合适的函数可以更好地满足程序的需求。

相关推荐