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

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

Patricia Arquette
發布: 2024-12-18 14:47:10
原創
191 人瀏覽過

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

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