


Erklären Sie den Unterschied zwischen Make und NEW in Go. Wann würden Sie jeweils verwenden?
Mar 26, 2025 pm 01:39 PMErklären Sie den Unterschied zwischen Make und NEW in Go. Wann würden Sie jeweils verwenden?
In Go, make
und new
werden beide zur Speicherzuweisung verwendet, aber sie dienen unterschiedlichen Zwecken und werden mit verschiedenen Typen verwendet.
-
Neu : Die
new
Funktion verteilt Speicher für einen bestimmten Typ und gibt einen Zeiger auf diesen Speicher zurück. Der Speicher wird für diesen Typ auf Nullwerte initialisiert.new
wird mit jedem Typ verwendet, einschließlich eingebauter Typen, Strukturen und benutzerdefinierten Typen. Es gibt einen Zeiger vom Typ*T
in den neu zugewiesenen Null -Speicher für ein neues Element vom TypT
zurück. Zum Beispiel:1
<code
class
=
"go"
>p :=
new
(int)
// p, of type *int, points to an unnamed int variable fmt.Println(*p) // prints 0</code>
Nach dem Login kopierenSie würden
new
verwenden, wenn Sie einen Zeiger auf einen Nullwert eines Typs benötigen, insbesondere wenn Sie mit Strukturen oder anderen zusammengesetzten Typen arbeiten, bei denen Sie sicherstellen möchten, dass alle Felder auf ihre Nullwerte initialisiert werden. -
Made : Die
make
-Funktion wird nur mit den integriertenslice
,map
undchannel
verwendet. Im Gegensatz zunew
make
diese Typen in Werte ungleich Null. Es gibt einen initialisierten (nicht nullten) Wert vom TypT
(nicht*T
) zurück, der verwendet wird. Zum Beispiel:1
<code
class
=
"go"
>s := make([]int, 5)
// s is a slice of ints, length 5, capacity 5 m := make(map[string]int) // m is a map of strings to ints c := make(chan int) // c is a channel of ints</code>
Nach dem Login kopierenSie würden
make
verwenden, wenn Sie Scheiben, Karten oder Kanäle initialisieren. Diese Typen benötigen eine spezielle Initialisierung und werden nicht nur mit Nullwerten zugeordnet.
Welche Arten von Datenstrukturen werden am besten mit "Make" in Go initialisiert?
In GO wurde die make
-Funktion speziell für die Initialisierung der folgenden drei Datenstrukturen entwickelt:
-
Scheiben : Scheiben sind dynamische Arrays, die wachsen oder schrumpfen können. Wenn Sie
make
mit einer Scheibe verwenden, geben Sie die Länge und optional die Kapazität an. Dies initialisiert die Scheibe mit Nullwerten für seine Elemente.1
<code
class
=
"go"
>mySlice := make([]int, 5, 10)
// length 5, capacity 10</code>
Nach dem Login kopieren -
Karten : Karten sind Schlüsselwertpaare, bei denen Schlüssel eindeutig sind. Verwenden Sie
make
mit einer Karte initialisiert eine leere Karte, um Schlüsselwertpaare zu speichern.1
<code
class
=
"go"
>myMap := make(map[string]int)</code>
Nach dem Login kopieren -
Kanäle : Kanäle sind die Leitungen, über die Sie Werte mit dem Kanalbetreiber
senden und empfangen können. Verwenden Sie <code>make
mit einem Kanal initialisiert einen leeren Kanal, der für die Kommunikation zwischen Goroutinen verwendet werden kann.1
<code
class
=
"go"
>myChannel := make(chan int)</code>
Nach dem Login kopieren
Wie unterscheidet sich die Speicherzuweisung zwischen 'Make' und 'neu' in Go?
Die Speicherzuweisung in GO unterscheidet sich auf folgende Weise zwischen make
und new
:
-
NEU : Wenn Sie
new
verwenden, verteilt Go Speicher für den Typ, den Sie angeben, und gibt einen Zeiger auf diesen Speicher zurück. Der Speicher wird für den angegebenen Typ auf den Nullwert initialisiert.new
führt im Wesentlichen eine einfache Speicherzuweisung ohne zusätzliche Initialisierung durch, die über die Einstellung von Nullwerten hinausgeht. Es ist allgemein und funktioniert mit jedem Typ.1
<code
class
=
"go"
>p :=
new
(int)
// allocates memory and returns a pointer to zeroed int</code>
Nach dem Login kopieren -
Made : Wenn Sie
make
verwenden, wenden Sie nicht nur Speicher, sondern initialisiert auch die Datenstruktur. Stellenmake
für Scheiben ein Array der angegebenen Länge und Kapazität zu, und das Scheiben wird mit Nullwerten initialisiert.make
für Karten und Kanäle die erforderliche interne Initialisierung durch, um sie zu verwenden.make
nur mit Scheiben, Karten und Kanälen.1
<code
class
=
"go"
>s := make([]int, 5)
// allocates memory for a slice and initializes it</code>
Nach dem Login kopieren
Zusammenfassend lässt new
Speicher zuweisen und gibt einen Zeiger auf Nulled Speicher zurück, während der Speicher make
und die angegebene Datenstruktur (Slice, MAP oder Channel) in einen Gebrauchszustand initialisiert.
In welchen Szenarien könnten "neu" angemessener sein als "Make" in Go?
new
ist möglicherweise angemessener make
in den folgenden Szenarien:
-
Wenn Sie mit benutzerdefinierten Typen oder Strukturen arbeiten : Wenn Sie einen benutzerdefinierten Typ oder eine benutzerdefinierte Struktur definieren und einen Zeiger auf eine Null -Instanz dieses Typs benötigen, ist
new
die entsprechende Wahl. Dies ist häufig nützlich, um Objekte zu initialisieren, bevor Sie ihre Felder ausfüllen.1
<code
class
=
"go"
>type Person struct { Name string Age int } p :=
new
(Person)
// p is of type *Person, points to zeroed Person struct p.Name = "Alice" p.Age = 30</code>
Nach dem Login kopieren -
Wenn Sie einen Zeiger auf einen Typ benötigen : Wenn Sie einen Zeiger auf einen Basistyp wie
int
,float64
usw. oder einen benutzerdefinierten Typ benötigen, bei dem Sie den Nullwert möchten, istnew
geeignet. Dies kann in Szenarien nützlich sein, in denen Sie direkt mit Zeigern arbeiten.1
<code
class
=
"go"
>pi :=
new
(int)
// pi is of type *int, points to zeroed int *pi = 42</code>
Nach dem Login kopieren -
Für eine effiziente Initialisierung von Null-Wert : Wenn Sie den Speicher für einen Typ ohne den Overhead von zusätzlichem Setup, der für Scheiben, Karten und Kanäle ausgeführt
make
, effizient zuordnen möchten, istnew
angemessener.1
<code
class
=
"go"
>zeroInt :=
new
(int)
// Efficient way to get a zeroed int pointer</code>
Nach dem Login kopieren - Für die Kompatibilität mit älteren Code oder Bibliotheken : In einigen Fällen erwarten älterer Go -Code oder Bibliotheken möglicherweise Zeiger auf Typen, und
new
kann verwendet werden, um diese Erwartungen zu erfüllen.
Zusammenfassend ist new
angemessener, wenn Sie einen Zeiger auf einen Nullwert eines beliebigen Typs benötigen, insbesondere wenn Sie mit benutzerdefinierten Typen, Strukturen oder Grundtypen arbeiten, bei denen Sie vor einer weiteren Manipulation auf Nullwerte initialisieren möchten.
Das obige ist der detaillierte Inhalt vonErklären Sie den Unterschied zwischen Make und NEW in Go. Wann würden Sie jeweils verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Dateien in Go Language bequem?

Wie schreibe ich Benchmarks, die die reale Leistung in Go genau widerspiegeln?
