Golang 杂项笔记
1. make 和 new 关键字
- make 用于创建并初始化 slice、map、chan,使其处于可用状态 (同时分配的空间自动分配零值)
- new 用于为任意类型分配零值内存,并返回该类型的指针 (注意 make 只能初始化内建类型, 自定义结构体需要 new)
1 | // len: 5, cap: 6 |
如果用 new 去初始化 slice 会得到一个 ptr == nil 的 slice 对象,相当于没有分配底层数组。这符合 new 的行为但是工程上不合适,这导致我们需要这么做:
1 | // s 的类型是 *int |
有点幽默了 :XD
个人理解 make 就像是内建类型初始化的专用语法糖,能把复杂的对象自动初始化完全。而 new 只是单纯用于简单结构的初始化(内存分配和设置零值)