ホームページ  >  記事  >  バックエンド開発  >  golang make と new の違い

golang make と new の違い

(*-*)浩
(*-*)浩オリジナル
2019-12-03 11:19:533003ブラウズ

golang make と new の違い

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。