技术文摘
探究 Go 里的 new() 与 make() 函数
2024-12-30 20:01:48 小编
在 Go 语言中,new() 和 make() 函数是两个经常被使用但又容易让人混淆的函数。深入理解它们的工作原理和适用场景对于编写高效、正确的 Go 代码至关重要。
new() 函数主要用于为值类型分配内存,并将其初始化为零值。例如,对于一个整数类型,使用 new() 会返回一个指向该整数的指针,且该整数被初始化为 0 。
var p *int
p = new(int)
fmt.Println(*p)
通过 new() 分配的内存是未初始化的,只保证了零值。
相比之下,make() 函数则主要用于为切片、映射和通道这三种引用类型分配内存并进行初始化。
对于切片,make() 可以指定长度和容量。
s := make([]int, 5, 10)
这里创建了一个初始长度为 5 ,容量为 10 的整数切片。
对于映射,make() 用于创建一个空的映射。
m := make(map[string]int)
通道的创建同样依赖 make() 。
ch := make(chan int)
需要注意的是,不能使用 new() 来创建这三种引用类型,否则会导致运行时错误或不可预测的行为。
在实际编程中,选择 new() 还是 make() 取决于具体的需求。如果是值类型,通常使用 new() 。而对于切片、映射和通道,必须使用 make() 来正确地初始化和分配内存。
new() 用于简单的值类型内存分配,make() 则专门用于处理引用类型的初始化和内存分配。熟练掌握这两个函数的差异和使用场景,能够让我们在 Go 语言编程中更加得心应手,写出更加健壮和高效的代码。
- Golang 处理高并发加锁事务的注意事项
- JS 字符串能比大小吗?
- 分布式环境中验证码登录的技术达成
- 削峰限流:秒杀场景中高并发写请求的解决办法
- 终于搞懂机器学习中的特征工程
- .NET Core:架构、特性与优势深度剖析
- 一文助您掌握 Selenium 与 BeautifulSoup:数据抓取核心技术解析
- 探究 Monitor.Wait 与 Pluse 的底层机制
- 九种技巧助力 Python 代码加速运行
- Go 零依赖的结构化日志处理
- 十分钟弄懂地图怎样实现红绿灯读秒
- 十分钟掌握 Golang 集合类型数据操作
- 深入解读 JavaScript 的 Storage 接口:一篇文章足矣
- TIOBE 10 月编程指数排行榜发布:Rust 语言稳定前行,将入前十
- 六款 IntelliJ IDEA 插件助力 Spring 与 Java 开发