slice用make和new
时间: 2024-09-17 19:08:23 浏览: 44
在Go语言中,`make`和`new`是用来创建不同类型的数据结构的函数,但对于切片(slice)而言,`make`才是创建和初始化切片的标准方法,而`new`并不直接用于创建切片。
**使用`make`创建切片:**
```go
// 创建一个空的切片,指定类型的元素,和初始容量
s := make([]T, capacity)
// 如果需要指定起始索引和长度,可以这样创建:
s = make([]T, from, to)
```
这里的`T`是你想要存储的元素类型,`capacity`是预留的空间容量,`from`是开始索引(包含)默认为0,`to`是终止索引(不包含)默认为`capacity`。
**对于数组(array),`new`通常用于创建:**
```go
a := new(T)[length]
```
这将创建一个指定类型`T`的新数组,并返回一个指向它的指针。然而,直接使用`[]T{...}`可以更简单地创建并初始化数组。
总之,`make`用于创建切片,因为它支持动态增长;而`new`则主要适用于静态大小、不支持动态增长的数据结构,如数组。如果你需要动态变化大小的切片,强烈建议使用`make`。
相关问题
golang make和new的区别
在 Go 中,make 和 new 是用来分别创建不同类型值的两个内置函数。
new 函数用于创建一个指定类型的指针,返回该指针指向一个新分配的零值。也就是说,new(T) 返回一个类型为 *T 的指针,该指针指向 T 的零值。
make 函数用于创建特定类型的引用类型(如 slice、map 和 channel),返回该类型的已初始化值。make(T, args) 返回一个类型为 T 的已初始化值,该值根据类型 T 的不同而有所不同。注意,make 函数只适用于引用类型,因为它需要对数据结构进行初始化,而值类型(如数组和结构体)可以通过简单的变量声明进行初始化。
make和new的区别
make和new的区别在于,make只能用于创建slice、map和channel类型的对象,而new可以用于创建任何类型的对象。make返回的是一个已经初始化了的对象,而new返回的是一个指向该类型零值的指针。此外,make需要传入额外的参数来指定容量等信息,而new不需要。