在Go编程中,make
和 new
是两个常用的内置函数,用于创建和初始化不同类型的数据结构。下面将简单介绍这两个函数以及它们的用法。
1. make
函数
make
函数主要用于创建切片(slice)、映射(map)和通道(channel)。它返回一个被初始化的、可以直接使用的数据结构。下面是 make
函数的基本语法:
make(T, size)
其中,T
是数据结构的类型,如切片、映射或通道,而 size
是容量参数。对于不同的数据结构,size
的含义略有不同:
1.1 切片(slice)
对于切片,size
表示切片的容量(capacity),它决定了切片可以包含多少元素。切片的长度(length)将自动初始化为0。
slice := make([]int, 5) // 创建一个整数切片,容量为5
1.2 映射(map)
对于映射,size
表示映射的初始容量。这有助于提高映射的性能,但不是必需的。
mymap := make(map[string]int, 10) // 创建一个字符串到整数的映射,初始容量为10
1.3 通道(channel)
对于通道,size
表示通道的缓冲区大小,如果为0表示无缓冲通道,否则表示有缓冲通道。
ch := make(chan int, 5) // 创建一个整数通道,带有5个缓冲区
2. new
函数
new
函数用于创建指向新分配的零值的指针。它主要用于创建结构体(struct)和基本数据类型的实例。以下是 new
函数的基本语法:
new(T)
其中,T
是类型的名称,例如结构体、整数或字符串。new
函数返回一个指向类型 T
的零值的指针。
var i *int
i = new(int) // 创建一个整数的指针,并将其赋给变量 i
3. make
与 new
的区别
- 返回类型不同:
make
返回已初始化的数据结构,而new
返回一个指向零值的指针。 - 使用场景不同:
make
用于切片、映射和通道的创建,而new
用于创建自定义数据类型的实例。 - 零值处理:
make
返回的数据结构已被初始化,而new
返回的指针指向零值。 - 内存分配:
make
会为数据结构分配所需的内存,而new
只会为指针分配内存。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意