知识卡片
new与取地址复合字面量的等价性
内容
Go创建”指向某类型零值的指针”有两种写法:内置的new(Type),或者对支持大括号初始化的类型使用&Type{},二者完全等价——都分配一块该类型的零值内存并返回指向它的指针,不需要关心手动释放,垃圾回收器会打理一切。发散:两种语法并存不是冗余,而是覆盖了”要不要在创建时就带初始值”这个维度——需要零值指针用new最直接,需要非零初始值就用&Type{},选择依据不是习惯。
参考来源
- 位置:《Go语言程序设计》第4章《集合类型》(源文件:_epub-src/OEBPS/text00038.html)
- 结论依据:原文在该章节围绕“Go创建"指向某类型零值的指针"有两种写法:内置的`new(Type)`,或者对支持大括号初始化的类型使用`&…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:始化的类型,我们只可以使用内置的 new() 函数。当然,我们不必担心该值的生命周期或怎么将其删除,因为Go语言的内存管理系统会帮我们打理一切。 使用结构体的 &Type{} 语法的一个好处是我们可以为其指定初始值,正如我们这里创建 augusta 指针时所做的那样(后面我们将看到,我们也可以只声明一些可选的字段而将其他字段设为它们的0值…