Inhaltsverzeichnis
Erklären Sie den Unterschied zwischen Make und NEW in Go. Wann würden Sie jeweils verwenden?
Welche Arten von Datenstrukturen werden am besten mit "Make" in Go initialisiert?
Wie unterscheidet sich die Speicherzuweisung zwischen 'Make' und 'neu' in Go?
In welchen Szenarien könnten "neu" angemessener sein als "Make" in Go?
Heim Backend-Entwicklung Golang Erklären Sie den Unterschied zwischen Make und NEW in Go. Wann würden Sie jeweils verwenden?

Erklären Sie den Unterschied zwischen Make und NEW in Go. Wann würden Sie jeweils verwenden?

Mar 26, 2025 pm 01:39 PM

Erklä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 Typ T 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 kopieren

    Sie 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 integrierten slice , map und channel verwendet. Im Gegensatz zu new make diese Typen in Werte ungleich Null. Es gibt einen initialisierten (nicht nullten) Wert vom Typ T (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 kopieren

    Sie 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. Stellen make 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, ist new 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, ist new 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!

Erklärung dieser Website
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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich? GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich? Mar 03, 2025 pm 05:17 PM

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 kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren? Mar 03, 2025 pm 05:22 PM

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

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Mar 10, 2025 pm 05:38 PM

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 kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Mar 10, 2025 pm 05:36 PM

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 konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache? Mar 03, 2025 pm 05:18 PM

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 kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Mar 10, 2025 pm 03:20 PM

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

Wie schreibe ich Dateien in Go Language bequem? Wie schreibe ich Dateien in Go Language bequem? Mar 03, 2025 pm 05:15 PM

Wie schreibe ich Dateien in Go Language bequem?

Wie schreibe ich Benchmarks, die die reale Leistung in Go genau widerspiegeln? Wie schreibe ich Benchmarks, die die reale Leistung in Go genau widerspiegeln? Mar 10, 2025 pm 05:36 PM

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

See all articles