Go 中 NEW 和 MAKE 的区别

简介: Go 中 NEW 和 MAKE 的区别

在 Go 语言中,newmake 是两个用于创建数据结构的关键字,它们之间有一些重要的区别:

  1. 适用的数据类型:

    • new 用于创建指针类型,它分配内存并返回指向该内存的指针。
    • make 用于创建 slice、map 和 channel 这三种引用类型,它返回初始化后的(非指针的)值。
  2. 内存分配方式:

    • new(T) 分配 T 类型大小的内存空间,并返回指向该内存的指针 *T
    • make(T, args) 则会根据 T 的类型执行不同的初始化操作。对于 slice,它会分配内存并初始化;对于 map,它会分配并初始化内部数据结构;对于 channel,它会创建一个 unbuffered 或 buffered 的通道。
  3. 返回值类型:

    • new(T) 返回一个指向新分配的 T 类型零值的指针 *T
    • make(T, args) 返回的是初始化后的 T 类型的值,而非指针。

举例说明:

// 使用 new 创建指针类型
p := new(int)
*p = 42 // 给指针指向的值赋值

// 使用 make 创建 slice、map 和 channel
s := make([]int, 0, 10) // 创建一个初始容量为 10 的 slice
m := make(map[string]int) // 创建一个 map
c := make(chan int, 100) // 创建一个容量为 100 的 channel

总的来说,new 适用于创建基本类型的指针,而 make 适用于创建 slice、map 和 channel 这三种引用类型。new 返回指针,make 返回初始化后的值。合理选择使用 new 还是 make 可以让您的代码更加优雅和高效。

相关文章
|
9月前
|
Go
终极对决:Go语言make和new完整比较
终极对决:Go语言make和new完整比较
318 0
|
1月前
|
安全 Go 开发者
Go语言中的空值与零值有什么区别?
在Go语言中,`nil`和零值有显著区别。`nil`用于表示指针、通道等类型的“无”或“不存在”,而零值是类型的默认值,如数字的0,字符串的`''`。`nil`常用于未初始化的变量或错误处理,零值用于提供初始值和避免未初始化的使用。理解两者差异能提升代码质量和稳定性。
|
2月前
|
存储 Go
|
存储 Go
仙人指路,引而不发,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中New和Make函数的使用背景和区别EP16
Golang只有二十五个系统保留关键字,二十几个系统内置函数,加起来只有五十个左右需要记住的关键字,纵观编程宇宙,无人能出其右。其中还有一些保留关键字属于“锦上添花”,什么叫锦上添花?就是从表面上看,就算没有,也无伤大雅,不影响业务或者逻辑的实现,比如lambda表达式之类,没有也无所谓,但在初始化数据结构的时候,我们无法避免地,会谈及两个内置函数:New和Make。
仙人指路,引而不发,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中New和Make函数的使用背景和区别EP16
Go语言 数组、切片、map的区别
Go语言 数组、切片、map的区别
125 0
|
程序员 Go
Go slice切片详解和实战:make append copy
这篇文章介绍切片的生成make()、切片的追加append()、切片的复制copy()。对知识点进行详细介绍和应用实战。
104 0
Go slice切片详解和实战:make append copy
Go初始化函数make和new有什么区别?
Go初始化函数make和new有什么区别?
make和new对比|Go主题月
make只可以用来创建map,slice,chan这三个类型,而且它是直接返回类型本身。
144 0
|
Go
Golang中make与new有何区别?
本文主要给大家介绍了Go语言中函数`new`与`make`的使用和区别,关于Go语言中`new`和`make`是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例说明他们的区别和使用。
86 0
|
5天前
|
JSON 测试技术 Go
零值在go语言和初始化数据
【7月更文挑战第10天】本文介绍在Go语言中如何初始化数据,未初始化的变量会有对应的零值:bool为`false`,int为`0`,byte和string为空,pointer、function、interface及channel为`nil`,slice和map也为`nil`。。本文档作为指南,帮助理解Go的数据结构和正确使用它们。
53 22
零值在go语言和初始化数据