「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go の「new()」関数と「&」メモリ アドレス演算子の違いは何ですか?

Go の「new()」関数と「&」メモリ アドレス演算子の違いは何ですか?

2024 年 11 月 8 日に公開
ブラウズ:532

What\'s the Difference Between the \

new() と "&" 演算子の違い

Go では、new() 関数と "&" メモリ アドレス演算子は両方ともメモリを割り当てるために使用されます。ただし、それらの使用法には微妙な違いがいくつかあります。

機能の比較

new() 演算子と & 演算子はどちらも、新しく割り当てられたメモリ アドレスへのポインタを返します。ただし、構文が異なります。

  • v := &Vector{} は、「&」演算子を使用して空の Vector struct のアドレスを取得します。
  • v := new( Vector) は、 new() 関数を使用して、新しい Vector 構造体へのポインターを作成します。

型分析

提供されたコード例で示されているように、リフレクション分析の結果、&Vector{} と new(Vector) は両方とも Vector struct.

Historical Confusion

のインスタンスへのポインタであるため、同じ型のポインタを返すことがわかりました。 Go メーリング リストでは、混乱を招く可能性があるため、メモリ割り当てに new() と & の両方を使用することについての懸念について以前に議論しました。

特殊なケース

注目に値します。 new() は、整数などの名前のない基本型へのポインターを取得する唯一のメソッドです。これは次の例で確認できます:

p := new(int) // valid
p := &int{0} // invalid

設定と使用法

最終的に、メモリ割り当てに new() を使用するか & を使用するかの選択は主に個人的な好み。どちらの方法も同じ機能を持ち、同じ結果が得られます。ただし、2 つの演算子の微妙な違いを認識し、特定の要件に基づいて適切に使用することが重要です。

リリースステートメント この記事は次の場所に転載されています: 1729661717 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3