Heim >Backend-Entwicklung >Golang >Der Unterschied zwischen Golang Make und New

Der Unterschied zwischen Golang Make und New

(*-*)浩
(*-*)浩Original
2019-12-03 11:19:533093Durchsuche

Der Unterschied zwischen Golang Make und New

make, neue Operationen

make wird für die Speicherzuweisung integrierter Typen (Map, Slice usw.) verwendet Kanal). new wird für verschiedene Arten der Speicherzuweisung verwendet. (Empfohlenes Lernen: go)

Die eingebaute Funktion new funktioniert im Wesentlichen genauso wie die gleichnamige Funktion in anderen Sprachen: new(T) is weist dem Speicherbereich vom Typ T eine Nullwertauffüllung zu und gibt seine Adresse zurück, die ein Wert vom Typ *T ist.

In Go-Begriffen gibt es einen Zeiger auf einen neu zugewiesenen Nullwert vom Typ T zurück. Eines ist sehr wichtig:

new返回指针。

Die eingebaute Funktion make(T, args) hat andere Funktionen als new(T, make kann nur Slice, Map und Channel erstellen und). Gibt einen Typ T mit einem Anfangswert (nicht Null) zurück, nicht *T. Der Unterschied zwischen diesen drei Typen besteht im Wesentlichen darin, dass Verweise auf Datenstrukturen vor der Verwendung initialisiert werden müssen.

Ein Slice ist beispielsweise ein Deskriptor mit drei Elementen, der einen Zeiger auf die Daten (internes Array), die Länge und die Kapazität enthält. Bis diese Elemente initialisiert werden, ist der Slice gleich Null. Für Slices, Maps und Kanäle initialisiert make die internen Datenstrukturen und füllt sie mit entsprechenden Werten.

make返回初始化后的(非零)值。

Codebeispiel:

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))

Ausgabe:

map[]
false
&map[]
false
map[]
true
map[bbb:BBB ccc:CCC aaa:AAA]
Success: process exited with code 0.

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Golang Make und New. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn