技术文摘
Go 语言中 New 与 Make 关键字的差异
2024-12-30 23:25:08 小编
在 Go 语言中,New 和 Make 是两个用于内存分配和初始化的关键字,但它们在使用场景和功能上存在着显著的差异。
New 关键字主要用于为值类型分配内存,并将其初始化为零值。例如,对于一个结构体类型,如果使用 New 来分配内存,那么结构体中的每个字段都会被初始化为相应类型的零值。这在需要创建一个全新的、未初始化的对象时非常有用。
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p := new(Person)
fmt.Println(p)
}
Make 关键字则主要用于为引用类型(如切片、映射和通道)分配内存并进行初始化。它不仅分配内存,还会对这些类型进行必要的初始化操作,使其处于可用状态。
以切片为例,使用 Make 可以指定切片的长度和容量。
package main
import "fmt"
func main() {
slice := make([]int, 5, 10)
fmt.Println(slice)
}
在映射的创建中,Make 可以确保创建出一个可用的映射,而不是一个未初始化的指针。
通道的创建同样依赖 Make 来确保其正常工作和通信。
New 用于值类型的内存分配和零值初始化,而 Make 则专门用于引用类型的内存分配和必要的初始化设置。理解这两个关键字的差异对于正确、高效地使用 Go 语言进行编程至关重要。在实际编程中,根据具体的数据类型和需求,选择合适的关键字来进行内存分配和初始化操作,可以避免出现错误,并提高程序的性能和可读性。
- 李阳:京东零售 OLAP 平台的建设与场景实践
- Spring Boot 整合多数据源:优雅之法
- DevOps:各阶段常见工具一览
- 面试官:相同虚拟地址在不同进程中,TLB 如何区分?
- 位运算之异或的奇妙用途
- Go 语言实现的几种限流算法
- 利用 SVG 打造带标识的 Favicon
- JVM 沙箱安全机制笔记系列
- Nacos 源码中订阅机制的来龙去脉
- 提升 Xenomai 实时性的若干配置建议
- Flink 并行流中 watermark 机制未触发窗口计算的原因剖析
- 可达性分析的深度解析:安全点与安全区域
- ToB 软件质量保障的两年历程
- Go 历经 13 年探讨,如何解决再赋值的陷阱?
- TypeScript 类型挑战:元组到对象的转换