首頁 > 後端開發 > Golang > Go 記憶體分配:`new()` 與 `&{}` – 真正的差異是什麼?

Go 記憶體分配:`new()` 與 `&{}` – 真正的差異是什麼?

Mary-Kate Olsen
發布: 2024-12-16 22:15:18
原創
875 人瀏覽過

Go Memory Allocation: `new()` vs `&{}` – What's the Real Difference?

分配難題:Go 中的new() 與「常規」指標

在Go 程式設計領域,出現了一個問題:是否存在為新物件分配記憶體時,以下兩個程式碼段之間有顯著差異嗎?

程式碼段 1:

v := &Vector{}
登入後複製

程式碼段2:

v := new(Vector)
登入後複製

答案:

令人驚訝的是,兩個代碼段之間沒有明顯的區別。它們都達到相同的結果:建立一個指向 Vector 類型的新實例的指標。

詳細說明:

呼叫 new(Vector) 時,new 關鍵字會為新的 Vector 物件指派記憶體並傳回指向該物件的指標。同樣,&Vector{} 也為新的 Vector 物件分配記憶體並傳回指向它的指標。

為了說明這一點,請考慮以下程式碼:

package main

import "fmt"
import "reflect"

type Vector struct {
    x   int
    y   int
}

func main() {
    v := &Vector{}
    x := new(Vector)
    fmt.Println(reflect.TypeOf(v))
    fmt.Println(reflect.TypeOf(x))
}
登入後複製

輸出:

*main.Vector
*main.Vector
登入後複製

如你所見,v和x都是指向Vector物件的指針。它們具有相同的類型。

用例:

雖然兩個程式碼段實現相同的結果,但一些開發人員認為,當分配的記憶體將是立即取消引用並使用,因為它有助於避免雙重取消引用錯誤。例如:

// Allocates memory and immediately dereferences it
v := new(Vector).x
登入後複製

結論:

總之,在 Go 中使用 new 和「常規」分配語法之間的選擇純粹取決於個人喜好。兩種方法都會分配記憶體並傳回指向新建立物件的指針,提供相同的功能。

以上是Go 記憶體分配:`new()` 與 `&{}` – 真正的差異是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板