golang中make和new的区别

admin 2025-01-06 19:49:28 编程 来源:ZONE.CI 全球网 0 阅读模式

在golang中,我们经常会使用make和new来创建变量。尽管它们都用于动态分配内存,但它们在功能和使用方式上有一些区别。本文将深入讨论make和new的不同之处。

make:

在golang中,make函数用于创建slice、map和channel类型的变量。使用make创建的对象是引用类型,并且返回的是对象本身而不是指针。make函数的语法如下:

make(T, size)

T表示要创建的对象的类型(slice、map或channel),size表示初始化时的长度(仅适用于slice和map)。

使用make创建对象时,会自动分配初始值并返回对应的引用类型变量。对于slice和map,make函数会分配足够的内存以容纳初始长度。对于channel,make函数会创建一个带有指定缓冲区大小的channel对象。

new:

与make函数不同,new函数用于创建所有类型的变量,包括基本数据类型。使用new创建的对象是指针类型,并返回指向新分配的零值对象的指针。new函数的语法如下:

new(T)

T表示要创建的对象的类型(可以是基本数据类型或任何结构体类型)。new函数会分配足够的内存来存储对象,并将指针返回给调用者。新分配的对象将以零值初始化。

与变量声明的区别:

下面的代码片段演示了使用make和new创建变量的区别:

package main

import "fmt"

func main() {
    // 使用make创建slice
    s := make([]int, 5)
    fmt.Println(s) // 输出: [0 0 0 0 0]

    // 使用new创建结构体
    var p *Person = new(Person)
    fmt.Println(p) // 输出: &{"" 0}
}

type Person struct {
    Name string
    Age  int
}

从上面的代码中可以清楚地看出,使用make创建的slice变量已经被初始化为默认值,而使用new创建的Person结构体变量则没有被初始化,只包含了初始值为零的字段。

总结:

通过上面的讨论,我们可以得出以下结论:

  • make函数用于创建slice、map和channel类型的变量,返回引用类型。
  • new函数用于创建所有类型的变量,返回指向新分配的零值对象的指针。
  • 使用make函数创建的对象已经被初始化为默认值,使用new函数创建的对象只包含初始值为零的字段。

因此,在选择make或new函数时,需要根据需求和变量类型来确定使用哪个函数。如果需要创建slice、map或channel类型的变量,并且希望它们被初始化为默认值,则应该使用make函数。如果只是想要分配内存并获得指向新分配的零值对象的指针,则应该使用new函数。

weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
golang中make和new的区别 编程

golang中make和new的区别

在golang中,我们经常会使用make和new来创建变量。尽管它们都用于动态分配内存,但它们在功能和使用方式上有一些区别。本文将深入讨论make和new的不同
golang会员管理 编程

golang会员管理

开头: 在当今数字化时代,会员管理系统成为越来越多企业的重要组成部分。而在众多编程语言中,Golang凭借其高效性、易用性和强大的并发能力成为了不少公司首选的开
golang sarama 消费者组 编程

golang sarama 消费者组

使用golang sarama消费者组进行消息消费在Golang开发中,使用sarama包可以方便地实现与Apache Kafka的交互。本文将介绍如何通过sa
golang 切分字符串 编程

golang 切分字符串

切分字符串是在日常编程中非常常见的操作之一。Golang提供了一些内置函数和方法来实现字符串的切分,本文将介绍几种常用的方式。使用strings包中的Split
评论:0   参与:  0