技术文摘
Golang 中 make 与 new 用法差异浅析
在 Golang 中,make 和 new 是两个用于分配内存和初始化值的操作,但它们在用法和用途上存在着显著的差异。
new 函数主要用于为值类型分配内存,并将其初始化为零值。例如,如果我们有一个 int 类型的变量,使用 new 分配内存后,该变量的值将被初始化为 0。以下是使用 new 分配内存的示例代码:
package main
import "fmt"
func main() {
num := new(int)
fmt.Println(*num)
}
而 make 函数则主要用于为切片、映射和通道等引用类型分配内存并进行初始化。它不仅分配内存,还会对这些数据结构进行必要的初始化操作,以确保其可以正确使用。以切片为例,使用 make 可以指定切片的长度和容量。
package main
import "fmt"
func main() {
s := make([]int, 5, 10)
fmt.Println(s)
}
在上述代码中,创建了一个长度为 5 ,容量为 10 的整数切片。
另一个重要的区别是,new 返回的是一个指向新分配内存的指针,而 make 返回的则是已经初始化好的对象本身。
在实际编程中,需要根据具体的需求来选择使用 make 还是 new 。如果只是简单地为值类型分配内存并获取零值,使用 new 即可。但如果要处理引用类型,特别是需要对其进行特定的初始化操作,如指定切片的长度和容量,或者创建一个初始状态非空的映射等,就应该使用 make 。
理解 make 与 new 的用法差异对于编写高效、正确的 Go 语言程序至关重要。只有在合适的场景下选择正确的内存分配和初始化方式,才能保证程序的性能和正确性。
TAGS: Golang 编程技巧 Golang 中的 make 用法 Golang 中的 new 用法 Golang 中 make 与 new 差异
- 聊聊分布式系统中基于 Redis 的分布式锁
- Redis中sentinel故障转移的深入剖析
- Mac 下快速重置 mysql root 密码的方法
- Redis 采用单线程的原因及运行速度快的缘由
- MySQL小练习:怎样查询表中倒数第三天的所有数据
- MySQL存储引擎索引浅析
- Redis 如何实现支持几乎所有加锁场景的分布式锁探讨
- MySQL索引失效原因浅析及应对办法
- 全面剖析MySQL组合索引及与单列索引的差异
- 聊聊Redis中的epoll与文件事件
- Kubernetes 解析与基于它的 MySQL 数据库部署方法
- 几款实用 Redis 可视化工具总结与分享
- 深入剖析Mysql索引下推:是什么以及对优化有无助力
- Redis 字典、哈希算法与 ReHash 原理浅述
- 深入剖析Redis缓存的8种淘汰策略