前言
记录下go语言中函数new
与make
的使用和区别,关于go语言中new
和make
是内建的两个函数,主要用来创建分配类型内存。
make介绍
在Go语言中,make
是一个用于创建切片、映射(map)和通道(channel)等引用类型的内置函数。make
的主要作用是为这些引用类型分配内存并进行初始化。
用法:
1. 创建切片(slice):
slice := make([]int, 5) // 创建一个包含5个整数的切片
make
接受两个参数,第一个是类型,第二个是长度。对于切片,还可以提供一个可选的容量参数:
slice := make([]int, 5, 10) // 创建一个长度为5,容量为10的切片
2. 创建映射(map):
myMap := make(map[string]int) // 创建一个字符串到整数的映射
3. 创建通道(channel):
ch := make(chan int) // 创建一个整数类型的通道
注意事项:
-
make
只能用于引用类型的数据结构,不能用于值类型(例如结构体)的创建。 -
make
返回被初始化的引用类型实例,而不是指针。 - 对于切片和映射,
make
除了分配内存,还会初始化内部的数据结构,确保它们可以被直接使用。 - 对于通道,
make
会创建并返回一个未被缓冲的通道。
总体而言,make
主要用于创建引用类型并进行初始化,以确保它们可以被正确地使用。
new介绍
在Go语言中,new
是一个用于为值类型分配内存并返回指向新分配的零值实例的指针的内置函数。new
主要用于创建值类型的实例,例如结构体。以下是 new
的基本用法和注意事项:
用法:
1. 创建值类型实例:
ptr := new(int) // 创建一个整数类型的指针,指向新分配的零值整数
2. 创建结构体实例:
type MyStruct struct {
Field1 int
Field2 string
}
instance := new(MyStruct) // 创建一个 MyStruct 类型的指针,指向新分配的零值结构体
注意事项:
-
new
返回一个指向新分配内存的零值实例的指针。 - 对于值类型,
new
分配的内存会被初始化为零值。 -
new
接受一个参数,即要分配内存的类型,并返回一个指向该类型的零值的指针。 -
new
不适用于引用类型(如切片、映射和通道),只能用于值类型的创建。 -
new
分配的内存不会被清理,需要程序员负责释放。
总体而言,new
主要用于为值类型分配内存,并返回一个指向新分配的零值实例的指针。在实际使用时,根据需要选择使用 new
还是直接声明和初始化。
make与new的异同
make
和 new
都是用于在Go语言中进行内存分配的内置函数,但它们的用途和行为有一些关键的区别。
相同点:
- 内存分配: 两者都用于在堆上分配内存。
不同点:
1. 适用类型:
-
make
: make: 只用于slice
、map
以及channel
的初始化。slice := make([]int, 5)
-
new
: 用于创建值类型的实例,例如结构体。返回一个指向新分配的零值实例的指针。ptr := new(int)
2. 返回类型:
-
make
: 返回被初始化的引用类型实例,而不是指针。 -
new
: 返回一个指向新分配的零值实例的指针。
3. 参数:
-
make
: 接受类型和长度等参数,用于初始化引用类型的内部数据结构。slice := make([]int, 5)
-
new
: 只接受类型参数,返回一个指向该类型的零值的指针。ptr := new(int)
4. 初始化:
-
make
: 除了分配内存,还会初始化引用类型的内部数据结构。 -
new
: 分配的内存会被初始化为零值。文章来源:https://www.toymoban.com/news/detail-801770.html
总结:
- 使用
make
主要用于初始化引用类型,确保它们可以被直接使用。 - 使用
new
主要用于为值类型分配内存,返回一个指向新分配的零值实例的指针。
选择使用 make
还是 new
取决于您要创建的数据结构的类型和初始化需求。文章来源地址https://www.toymoban.com/news/detail-801770.html
到了这里,关于golang中make与new有什么区别?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!