首页  >  文章  >  后端开发  >  Go 中的“new()”函数和“&”内存地址运算符有什么区别?

Go 中的“new()”函数和“&”内存地址运算符有什么区别?

Patricia Arquette
Patricia Arquette原创
2024-10-23 13:58:02393浏览

What's the Difference Between the

new() 和 "&" 运算符的区别

Go 中 new() 函数和 "&" 内存地址运算符都用于分配内存。但是,它们的用法之间存在一些细微的差异。

功能比较

new() 和 & 运算符都返回指向新分配的内存地址的指针。但是,它们的语法不同:

  • v := &Vector{} 使用“&”运算符获取空 Vector 结构体的地址。
  • v := new( Vector) 使用 new() 函数创建指向新 Vector 结构体的指针。

类型分析

如提供的代码示例所示,反射分析表明 &Vector{} 和 new(Vector) 返回相同类型的指针,因为两者都是指向 Vector 结构体实例的指针。

历史混乱

Go 邮件列表之前讨论过有关同时使用 new() 和 & 进行内存分配的问题,因为它可能会导致混乱。

特殊情况

值得注意new() 是获取指向未命名基本类型(例如整数)的指针的唯一方法。这可以在以下示例中看到:

p := new(int) // valid
p := &int{0} // invalid

偏好和使用

最终,使用 new() 和 & 进行内存分配之间的选择很大程度上取决于个人喜好问题。两种方法具有相同的功能并产生相同的结果。然而,重要的是要意识到这两个运算符之间的细微差别,并根据具体要求适当地使用它们。

以上是Go 中的“new()”函数和“&”内存地址运算符有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn