c语言编程笔录

首页 >   > 笔记大全

笔记大全

GO语言make和new关键字有什么区别

更新时间:2023-11-17

前言:

在Go语言中,有两个关键字make和new用于创建变量和分配内存空间。虽然它们都可以用于创建变量,但它们的作用和用法有一些区别。在本文中,我们将分别介绍make和new关键字的区别,以及它们在Go语言中的使用方式。

1. make关键字

在Go语言中,make关键字主要用于创建切片、映射和通道等数据结构。make关键字会初始化底层的数据结构,并返回一个已初始化的引用。其基本语法如下:
make(类型, 长度, 容量)
其中,类型表示要创建的变量类型,长度和容量分别表示创建的切片、映射或通道的初始长度和容量。需要注意的是,只有切片、映射和通道才能使用make关键字创建,其他类型的变量不适用。

2. new关键字

与make关键字不同,new关键字主要用于创建指向某个类型的指针,并分配内存空间。它返回的是该类型的指针,并且指向的值为该类型的零值。其基本语法如下:
new(类型)
其中,类型表示要创建的变量类型。需要注意的是,new关键字只能用于创建指向基本类型、结构体或数组的指针,不能用于创建切片、映射和通道等复杂类型的指针。

3. 区别和用途

make关键字和new关键字在功能和用途上有一些区别。 首先,make关键字适用于切片、映射和通道等复杂数据结构的创建和初始化。通过make关键字创建的变量已经被初始化,并分配了内存空间,可以直接使用。而new关键字适用于基本类型、结构体或数组的指针的创建,返回的指针指向的值为该类型的零值,需要手动进行赋值操作。 其次,make关键字可以指定切片、映射和通道的长度和容量,对于切片和映射来说,长度表示已经分配了多少元素的内存空间,容量表示在扩容之前最多可以存储多少元素;对于通道来说,长度表示当前通道中尚未被接收的元素个数,容量表示通道的缓冲区大小。而new关键字只能创建指针,无法指定长度和容量。 最后,make关键字返回的是已经初始化的引用,而new关键字返回的是指向类型零值的指针。因此,使用make关键字创建的切片、映射和通道可以直接使用,而使用new关键字创建的指针需要进行赋值操作后才能使用。

总结:

在Go语言中,make关键字和new关键字都可以用于创建变量和分配内存空间,但它们的作用和用法有所不同。make关键字适用于切片、映射和通道等复杂数据结构的创建和初始化,返回已经初始化的引用;而new关键字适用于基本类型、结构体或数组的指针的创建,返回指向类型零值的指针。make关键字可以指定切片、映射和通道的长度和容量,而new关键字只能创建指针,无法指定长度和容量。使用make关键字创建的变量可以直接使用,而使用new关键字创建的指针需要进行赋值操作后才能使用。根据具体的需求和数据结构,选择适合的关键字进行变量的创建和内存分配。