技术文摘
深入探析 Go 里的 new() 与 make() 函数
2024-12-30 19:56:54 小编
在 Go 语言中,new() 和 make() 函数是经常被使用但又容易被混淆的两个重要函数。深入理解它们的工作机制和适用场景对于编写高效、正确的 Go 代码至关重要。
new() 函数主要用于为值类型分配内存,并将其初始化为零值。它返回一个指向新分配内存的指针。例如,对于一个整数类型 int ,使用 new(int) 会返回一个指向新分配的零值整数的指针。
make() 函数则主要用于为切片、映射和通道这三种引用类型分配内存并进行初始化。与 new() 函数不同,make() 函数能够对创建的对象进行更细致的初始化操作。
以切片为例,使用 make([]int, 5) 不仅分配了内存,还指定了切片的长度为 5 ,并且元素都被初始化为零值。如果要指定切片的容量,还可以使用 make([]int, 5, 10) ,表示长度为 5 ,容量为 10 。
对于映射,make(map[string]int) 会创建一个空的映射,准备用于存储键值对。
通道方面,make(chan int) 创建一个无缓冲的整数通道,而 make(chan int, 5) 创建一个容量为 5 的缓冲通道。
在实际编程中,正确选择 new() 与 make() 函数取决于具体的需求。如果只是需要为值类型分配内存并获取其指针,使用 new() 即可。而对于引用类型,特别是需要对其进行特定的初始化设置时,就应该使用 make() 函数。
清晰地理解 new() 和 make() 函数的差异和适用场景,能够让我们在 Go 语言编程中更加得心应手,避免出现不必要的错误和性能问题。通过合理运用这两个函数,我们可以编写出更加高效、简洁和可靠的 Go 程序。
- 轻量级 Linux 虚拟机的 Go 语言实现
- RocketMQ Tag 在实际业务中的作用是什么?
- 谈谈 C# 里令人惶恐的 Bitmap
- 面试官:聊聊对 Javascript 事件循环机制的认识
- Python 六大数据处理与分析库的经验分享
- Peer to Peer 架构的详细解析
- 掌握 C++ 静态成员类内初始化的正确方法
- Web 应用 API 设计的类别、准则及出色实践
- 您仍在用打桩记录 for 循环吗?
- 六款优质开源 SpringBoot 项目 皆为精品
- LaTeX 数学公式排版指南:一篇足矣
- Spring AI:Java 工程师玩转大模型秘籍
- Axios 取消请求的方法及原理
- 别太轻信 SetInterval!我被它坑惨了
- JavaScript 中外部解决 Promise 的实际应用场景