技术文摘
解析 Golang 中的 Make 和 New 函数
2024-12-31 00:38:08 小编
在 Go 语言中,Make 和 New 函数是用于内存分配和初始化的重要工具,但它们有着不同的用途和特点。
New 函数主要用于为值类型分配内存,并将其初始化为零值。例如,对于一个整数类型,可以使用 new(int) 来分配内存并得到一个指向该整数的指针。
package main
import "fmt"
func main() {
numPtr := new(int)
fmt.Println(*numPtr)
}
Make 函数则主要用于为切片、映射和通道等引用类型分配内存并进行初始化。
对于切片,使用 make([]int, 5) 可以创建一个长度为 5 的整数切片。
slice := make([]int, 5)
对于映射,make(map[string]int) 会创建一个空的字符串到整数的映射。
m := make(map[string]int)
通道也可以通过 make(chan int) 来创建。
两者的主要区别在于,New 函数返回的是一个指向新分配内存的指针,且只对值类型进行零值初始化。而 Make 函数不仅分配内存,还对引用类型进行了一些必要的初始化设置,使其处于可用状态。
在实际编程中,正确选择使用 Make 还是 New 函数非常重要。如果错误地使用 New 来分配引用类型,可能会导致未初始化的引用类型在使用时出现运行时错误。
例如,对于切片,如果使用 new([]int) 得到的是一个指向未初始化切片的指针,而不是一个可用的切片。
理解 Make 和 New 函数的工作原理和适用场景,有助于我们在 Go 语言中更高效、更安全地进行内存管理和对象创建。通过合理运用这两个函数,可以编写出更健壮、性能更优的 Go 程序。无论是处理简单的值类型还是复杂的引用类型,准确选择合适的函数将为我们的代码质量和程序性能带来积极的影响。
- 为何 Java 程序运行一段时间后速度变快?
- JavaScript 事件循环中的微任务 Microtask
- CES 2021:值得期待的 VR/AR 产品汇总
- Zookeeper 常见的 11 个连环问题
- Java 基础入门中的多态与对象类型转换
- 2021 年必读的 10 本软件工程书籍
- 哪些指标关乎 Node.js 服务稳定性的提升?
- C 语言指针:底层原理与花式技巧的图文代码详解
- 鸿蒙 HarmonyOS 三方件开发指南(3)——AsyncHttpHarmony 组件
- Spring 里令人倾心的代码技巧
- Java 反射知识点漫谈
- 2 分钟模拟后端接口,无需等待后端!开源项目来袭
- 面试中事务隔离级别的“吊打”经历
- 因不懂 Istio 架构原理被同事Diss
- 手握项目,掌控 820 个 ML Python 库,star 量达 260 万