」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Go 中的「new()」函數和「&」記憶體位址運算子有什麼不同?

Go 中的「new()」函數和「&」記憶體位址運算子有什麼不同?

發佈於2024-11-08
瀏覽:863

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() 和& 進行記憶體分配之間的選擇很大程度上取決於個人喜好。兩種方法具有相同的功能並產生相同的結果。然而,重要的是要意識到這兩個運算符之間的細微差別,並根據具體要求適當地使用它們。

版本聲明 本文轉載於:1729661717如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3