1. ホーム
  2. go

[解決済み] ローカル構造体へのポインタを返す

2023-02-23 08:15:41

質問

このような構成のコードサンプルを見かけることがあります。

type point struct {
  x, y int
}

func newPoint() *point {
  return &point{10, 20}
}

私はC++のバックグラウンドを持っており、それは私のためのエラーのように思える。このような構成のセマンティックは何ですか?新しいポイントは、スタックまたはヒープ上に割り当てられますか?

どのように解決するのですか?

Goはポインタのエスケープ解析を行います。ポインタがローカル スタックをエスケープしている場合 (この場合はエスケープしています)、オブジェクトはヒープ上に割り当てられます。ローカル関数をエスケープしない場合、コンパイラはスタック上に自由に割り当てることができます (ただし、保証はありません。ポインタのエスケープ分析が、ポインタがこの関数にローカルなままであることを証明できるかどうかに依存します)。