首頁 >後端開發 >Golang >Go 初始化:`&` 與 `new()`:有什麼不同?

Go 初始化:`&` 與 `new()`:有什麼不同?

Patricia Arquette
Patricia Arquette原創
2024-12-18 14:47:10287瀏覽

Go Initialization:  `&` vs. `new()`: What's the Difference?

Go 中的值初始化

在Go 中,使用& 初始化值與使用new() 似乎是不同的方法,但是它們功能本質上是相同的。

說明等價

考慮以下程式碼片段:

v := &Vector{}

v := new(Vector)

這裡,V🎜>和

定義類型。兩種方法都為 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

輸出:

就像видно一樣,這兩種方法都會產生指向Vector的指針type.

歷史背景和偏好

雖然兩種方法達到相同的結果,但它們各自的歷史可能會影響開發人員的偏好。 new() 在 Go 開發的早期引入,是初始化指向基本型別(如整數)的指標的唯一方法。從那時起,& 被添加為適用於任何類型的更通用方法。

結論

最終, & 和 new() 之間的選擇是一個問題的偏好。兩種方法都會分配記憶體並傳回指向已分配記憶體的指針,從而實現相同的功能。

以上是Go 初始化:`&` 與 `new()`:有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn