#make、新しい操作
make は、組み込み型 (マップ、スライス、およびチャンネル)。 new は、さまざまな種類のメモリ割り当てに使用されます。 (推奨学習: go)
組み込み関数 new は、他の言語の同じ名前の関数と基本的に同じ機能を持ちます: new(T)タイプ T のメモリ空間にゼロ値が割り当てられ、そのアドレス (タイプ *T の値) が返されます。
Go 用語で言えば、新しく割り当てられた T 型のゼロ値へのポインタを返します。非常に重要なことが 1 つあります:
new返回指针。
組み込み関数 make(T, args) には new(T) とは異なる関数があります。make はスライス、マップ、チャネルのみを作成できます。 *T ではなく、初期 (ゼロ以外) 値を持つタイプ T を返します。 基本的に、これら 3 つのタイプが異なる理由は、データ構造への参照を使用前に初期化する必要があるためです。
たとえば、スライスはデータ (内部配列)、長さ、および容量へのポインターを含む 3 つの項目の記述子であり、これらの項目が初期化される前はスライスは nil です。スライス、マップ、およびチャネルの場合、make は内部データ構造を初期化し、それらに適切な値を埋めます。make返回初始化后的(非零)值。
コード例:
var map1 map[string]string = make(map[string]string) fmt.Println(map1) fmt.Println(map1 == nil) var map2 *map[string]string = new(map[string]string) fmt.Println(map2) fmt.Println(map2 == nil) fmt.Println(*map2) fmt.Println(*map2 == nil) // var map1 map[string]string map1["aaa"] = "AAA" map1["bbb"] = "BBB" map1["ccc"] = "CCC" fmt.Println(map1) fmt.Println(len(map1))
出力:
map[] false &map[] false map[] true map[bbb:BBB ccc:CCC aaa:AAA] Success: process exited with code 0.
以上がgolang make と new の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。