golang make new 区别

admin 2024-10-06 23:03:02 编程 来源:ZONE.CI 全球网 0 阅读模式

在Go语言中,make和new是两个常用的关键字,用于在运行时动态地分配内存。虽然它们都能创建新的对象,但实际上它们有着不同的作用和使用场景。

1. make的作用和使用

make函数主要用于创建切片、映射和通道等引用类型的数据结构。它的基本语法是:

make(T, size)

其中T表示要创建的类型,size表示要为其分配的内存空间大小。对于切片和映射,我们只需要传递类型并且不需要指定大小,因为它们是引用类型,所以底层数据结构会自动分配所需的内存。

例如,我们可以使用make函数创建一个切片:

slice := make([]int, 10)

上述代码会创建一个长度为10的整型切片,并将其赋值给slice变量。这里的make函数会初始化切片的底层数组,并为其分配足够的内存空间。

2. new的作用和使用

与make不同,new关键字主要用于创建值类型的对象,如结构体。它的基本语法是:

new(T)

其中T表示要创建的类型。new函数会分配足够的内存空间,并返回一个指向该内存的指针。

举个例子,我们可以使用new关键字创建一个整型变量:

ptr := new(int)

上述代码会创建一个新的整型变量,并将其赋值给ptr变量。这里的new函数会分配4个字节的内存空间,用于存储整数类型的数据。

3. make和new的适用场景

make和new有着不同的适用场景。它们的选择主要取决于所创建对象的类型和需求。

3.1 创建引用类型对象

当我们需要创建切片、映射或通道等引用类型的对象时,应该使用make函数。这是因为这些对象底层使用了指针来管理数据,需要在内存中分配足够的空间来存储元素和相关信息。

例如,当我们需要创建一个动态大小的字符串数组时,应该使用make函数来创建切片。此时,make会在内存中分配连续的空间来存储字符串元素,并且可以根据需要动态地调整切片的大小。

3.2 创建值类型对象

当我们需要创建结构体或其他值类型对象时,应该使用new关键字。这是因为值类型的对象在内存中是分配在栈上的,不需要连续的内存块来存储数据。

例如,当我们需要创建一个新的整型变量时,可以使用new函数来动态地分配内存空间,然后通过指针来操作这个变量。

3.3 选择合适的方式

在某些情况下,我们可能需要同时创建引用类型和值类型对象。此时,我们可以根据具体需求选择合适的方式。

例如,如果我们需要创建一个包含初始值的整型切片,可以使用make函数创建切片并初始化其元素,然后通过索引赋值的方式修改其中的元素。

另外,我们还可以使用new关键字创建一个结构体对象,并且在之后通过指针访问其成员属性。

通过对比make和new的作用和使用方式,我们可以根据具体需求选择合适的关键字来创建对象。make适用于引用类型对象的创建,而new适用于值类型对象的创建。在实际开发中,我们应该根据对象类型、内存需求和操作方式等因素来决定使用make还是new。

weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
golang make new 区别 编程

golang make new 区别

在Go语言中,make和new是两个常用的关键字,用于在运行时动态地分配内存。虽然它们都能创建新的对象,但实际上它们有着不同的作用和使用场景。1. make的作
golang if map 编程

golang if map

引言 作为一名专业的Golang开发者,了解和掌握Golang中的条件语句是至关重要的。其中,使用if语句操作map类型是在日常开发中频繁使用的技巧之一。本文将
调试 golang gin 编程

调试 golang gin

调试golang gin开头: 在进行golang web开发时,使用了gin这个流行的框架是非常常见的。然而,由于各种原因,可能会遇到一些bug或者问题需要进
golang内存索引 编程

golang内存索引

Go语言是一种高性能、并发、编译型的开源编程语言。它在内存管理方面有许多独特而优秀的特点,其中之一就是内存索引。内存索引是一种高效地访问和管理内存的技术,它可以
评论:0   参与:  0