Go での値の初期化
Go では、 & を使用して値を初期化するのと new() を使用するのは異なるアプローチのように見えるかもしれませんが、機能は基本的に同じです。
等価性
次のコード スニペットを考えてみましょう:
v := &Vector{}
および
v := 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
同様に、どちらのメソッドも Vector へのポインタを生成します。 type.
歴史的背景と好み
どちらの方法でも同じ結果が得られますが、それぞれの歴史が開発者の好みに影響を与える可能性があります。 new() は Go の開発初期に導入され、整数などの基本型へのポインターを初期化する唯一の方法でした。それ以来、& は、どの型にも機能する、より一般的なアプローチとして追加されました。
結論
最終的には、& と new() のどちらを選択するかが問題になります。好みの。どちらのアプローチでもメモリを割り当て、割り当てられたメモリへのポインタを返すため、機能は同じになります。
以上がGo の初期化: `&` と `new()` : 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。