golang 包 new 区别

发布时间:2024-07-05 00:21:31

Go语言包new和make的区别

在Go语言中,new和make是两个用于分配内存空间的关键字。虽然它们的作用都是用于创建值,但在具体用法上有一些区别。本文将深入探讨new和make的区别。

new关键字

new是一个用于创建指定类型实例的关键字。它返回了指向该类型内存空间的指针。换句话说,使用new关键字创建的对象是一个指针。

例如:

```go var i *int i = new(int) ```

以上代码创建了一个指向int类型的指针i,该指针不仅分配了内存空间,而且已经为其赋予了零值。

需要注意的是,new关键字只是分配了内存空间,并没有对其进行初始化。这意味着创建的实例的每个字段都会被设置为默认值(nil、false、0或者'')。

make关键字

make也是一个用于创建实例的关键字,但是它主要用于创建切片、映射和通道等引用类型的对象。make关键字返回的是该类型的实例,而不是一个指针。

例如:

```go var s []int s = make([]int, 0, 10) ```

以上代码使用make创建了一个切片s,该切片的初始长度是0,预留了10个元素的容量。

需要注意的是,make关键字会进行额外的内部初始化,并返回指定类型的实例。这意味着创建的对象已经准备好被使用,可以立即进行赋值等操作。

适用场景

虽然new和make都可以用于创建实例,但是它们在使用场景上有一些区别。

总结

通过对new和make的比较,我们了解到它们的不同之处。new关键字用于分配内存并返回指针,适用于创建非引用类型的对象;而make关键字用于创建引用类型的对象,会进行额外的初始化,返回实例而不是指针。

综上所述,对于不同的类型和需求,我们可以灵活地选择使用new或make来创建对象,以便更好地满足程序的要求。

相关推荐