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 可以让您的代码更加优雅和高效。

相关文章
|
Go 调度 开发者
[go 面试] 深入理解进程、线程和协程的概念及区别
[go 面试] 深入理解进程、线程和协程的概念及区别
|
并行计算 数据挖掘 大数据
[go 面试] 并行与并发的区别及应用场景解析
[go 面试] 并行与并发的区别及应用场景解析
|
存储 Rust Go
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
418 1
Go nil 空结构体 空接口有什么区别?
|
存储 Go
Go中make和new的区别
在 Go 语言中,`make` 和 `new` 都用于分配内存,但功能不同。`make` 用于初始化切片、映射和通道,并返回初始化后的对象;`new` 分配内存并返回指向零值的指针,适用于任何类型。`make` 返回的是数据结构本身,而 `new` 返回指针。`make` 完整初始化特定数据结构,`new` 只初始化为零值。
609 0
|
Unix 编译器 Go
go 切片长度与容量的区别
go 切片长度与容量的区别
|
存储 Go 数据处理
C 数组和 Go 切片的区别详解
【8月更文挑战第31天】
247 0
|
Go
Golang中make与new有何区别?
本文主要给大家介绍了Go语言中函数`new`与`make`的使用和区别,关于Go语言中`new`和`make`是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例说明他们的区别和使用。
334 1

热门文章

最新文章