golang中make和new区别

发布时间:2024-07-05 00:02:51

在golang中,我们常常使用make和new这两个内建函数来创建和初始化变量。尽管它们都是用于分配内存空间的函数,但它们在功能上有着明显的区别。本文将通过对make和new的功能、使用方式以及适用场景的详细说明,来解释它们之间的差异。

make函数的功能和用法

make函数是golang中的一种内建函数,其主要功能是用于创建指定类型的数据结构,并且会完成数据结构的初始化。make的语法形式为:make(T, args) T是数据结构的类型,args是该数据结构的初始化参数。需要注意的是,只有slice、map和channel这三种引用类型才可以使用make函数进行初始化。

new函数的功能和用法

new函数也是golang中的一种内建函数,用于分配内存空间并返回一个指向新分配内存地址的指针。new的语法形式为:new(T) T是指针类型,new函数会返回一个指向T类型零值的指针。需要注意的是,new函数并不会进行数据的初始化,只会将内存置零。

make和new的适用场景

我们可以根据make和new函数的特点来确定它们的适用场景。

对于需要初始化的引用类型(slice、map和channel),我们可以使用make函数,因为它会在分配内存之后,针对不同的数据结构进行初始化,并返回一个已初始化的引用。

对于需要直接分配内存空间的非引用类型,我们可以使用new函数,因为它仅仅会分配内存空间并返回一个指向该内存的指针。需要注意的是,由于new函数只将内存置零,而不会进行数据的初始化,因此使用new函数创建的非引用类型需要手动进行初始化操作。

通过上述的详细说明,我们可以得出结论:make和new函数在golang中都是用于分配内存的函数,但它们的功能和用法有着明显的区别。make函数主要用于创建引用类型的数据结构,并完成初始化;而new函数则主要用于分配内存空间,但不进行数据的初始化。是否使用make或者new根据具体的需求而定,在选择时需要根据数据类型和初始化要求进行合理判断。

相关推荐