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中文網其他相關文章!