pointers - t=&T{} 和 t=new(T) 的核心区别是什么
问题描述
似乎使用所有“0”成员值创建新对象指针的两种方法都返回一个指针:
type T struct{}
...
t1:=&T{}
t2:=new(T)
那么 t1 和 t2 之间的核心区别是什么,或者有什么“新”可以做而 &T{} 不能做的事情,反之亦然?
解决方案
[...] 有什么“新”可以做而 &T{} 不能做的事情,反之亦然?
我能想到三个不同点:
- “复合文字”语法(的
T{}
一部分&T{}
)仅适用于“结构、数组、切片和映射”[链接],而该new
函数适用于任何类型[链接]。 - 对于结构或数组类型,
new
函数总是为其元素生成零值,而复合文字语法允许您根据需要将一些元素初始化为非零值。 - 对于切片或映射类型,
new
函数始终返回指向 的指针nil
,而复合文字语法始终返回已初始化的切片或映射。(对于地图来说,这非常重要,因为您不能向 . 中添加元素nil
。)此外,复合字面量语法甚至可以创建非空切片或地图。
(第二个和第三个要点实际上是同一件事的两个方面——new
函数总是创建零值——但我将它们分开列出,因为不同类型的含义有点不同。)
推荐阅读
- text - 带有文本的openlayer标记,关卡有些奇怪
- regression - i 之间有区别吗?并吸收stata?
- python - 为未知大小的元组输入提示?
- python-3.x - 如何将字典解构为 eval 命令作为函数参数
- nginx - 在 nginx 中处理具有相同名称的子文件夹和 slug
- google-sheets - 谷歌表格 - 从一个单元格内拆分行并拖动相邻名称以匹配
- reactjs - 来自 api 的映射对象数组反应
- rust - 错误:与`cc`链接失败:退出代码:1运行货物测试时--all
- xml - XSLT 匹配输出匹配模板外部的值
- django - 如何为 GenericForeignKeys 预取相关()?