ホームページ > バックエンド開発 > Golang > Go の初期化: `&` と `new()` : 違いは何ですか?

Go の初期化: `&` と `new()` : 違いは何ですか?

Patricia Arquette
リリース: 2024-12-18 14:47:10
オリジナル
188 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート