new()和“&”运算符的区别
Go中new()函数和“&”内存地址运算符都用于分配内存。然而,它们的用法之间存在一些细微的差异。
功能比较
new()和&运算符都返回指向新分配的内存地址的指针。但是,它们的语法有所不同:
类型分析
如提供的代码示例所示,反射分析表明 &Vector{} 和 new(Vector) 返回相同类型的指针,因为两者都是指向 Vector 结构体实例的指针。
历史混乱
Go 邮件列表之前讨论过使用 new() 和 & 进行内存分配的担忧,因为它可能会导致混乱。
特殊情况
值得注意的是,new()是获取指向未命名基本类型的指针的唯一方法,例如一个整数。这可以在下面的示例中看到:
p := new(int) // valid p := &int{0} // invalid
首选项和用法
最终,使用 new() 和 & 进行内存分配之间的选择很大程度上取决于个人喜好。两种方法具有相同的功能并产生相同的结果。然而,重要的是要意识到这两个运算符之间的细微差别,并根据具体要求适当地使用它们。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3