首頁  >  文章  >  後端開發  >  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