`make` und Map Initialisierung (wie `make map`) in Go verstehen
Ethan Miller
Product Engineer · Leapcell

Key Takeaways
- Die Funktion
make
initialisiert und allokiert Speicher für Maps, wodurch sie sofort verwendbar sind. new
gibt einen Zeiger auf eine Nil-Map zurück, was eine zusätzliche Initialisierung vor der Verwendung erfordert.- Map-Literale bieten eine prägnante Möglichkeit, Maps mit vordefinierten Schlüssel-Wert-Paaren zu deklarieren und zu initialisieren.
In Go sind Maps essentielle Datenstrukturen, die ungeordnete Schlüssel-Wert-Paare speichern und einen effizienten Datenabruf über Schlüssel ermöglichen. Die korrekte Initialisierung von Maps ist entscheidend, um Laufzeitfehler zu vermeiden und eine optimale Leistung sicherzustellen. Dieser Artikel befasst sich mit der Rolle der Funktion make
bei der Map-Initialisierung und vergleicht sie mit anderen Methoden zum Erstellen von Maps in Go.
Die Rolle von make
bei der Map-Initialisierung
Die Funktion make
in Go ist eine integrierte Funktion, die speziell dafür entwickelt wurde, Speicher für Slices, Maps und Kanäle zu initialisieren und zu allokieren. Bei Maps allokiert make
nicht nur den notwendigen Speicher, sondern stellt auch sicher, dass die Map zur Verwendung bereit ist. So können Sie make
verwenden, um eine Map zu erstellen:
dict := make(map[string]int)
In diesem Beispiel ist dict
eine Map mit Schlüsseln vom Typ string
und Werten vom Typ int
. Die Funktion make
initialisiert die Map, sodass Sie sofort Schlüssel-Wert-Paare hinzufügen können:
dict["Alice"] = 30
Der Versuch, Elemente zu einer Map hinzuzufügen, die nicht ordnungsgemäß initialisiert wurde, führt zu einer Laufzeit-Panic. Daher ist die Verwendung von make
der Standard- und empfohlene Ansatz, um sicherzustellen, dass die Map für Operationen bereit ist.
Vergleichen von make
mit anderen Methoden zur Map-Erstellung
Während make
die konventionelle Methode zum Initialisieren von Maps ist, bietet Go andere Möglichkeiten, Maps zu deklarieren, jede mit ihren Nuancen.
Verwenden von Map-Literalen
Map-Literale ermöglichen die Deklaration und Initialisierung von Maps in einer prägnanten Weise. Dieser Ansatz ist besonders nützlich, wenn Sie die anfänglichen Schlüssel-Wert-Paare zum Zeitpunkt der Deklaration kennen:
dict := map[string]int{ "Alice": 30, "Bob": 25, }
Diese Syntax deklariert nicht nur die Map, sondern initialisiert sie auch mit den angegebenen Schlüssel-Wert-Paaren. Die Map ist sofort nach dieser Deklaration einsatzbereit.
Verwenden der Funktion new
Die Funktion new
in Go allokiert Speicher und gibt einen Zeiger auf den Nullwert des angegebenen Typs zurück. Bei Verwendung mit Maps gibt sie einen Zeiger auf eine Nil-Map zurück, die nicht sofort einsatzbereit ist:
dictPtr := new(map[string]int)
Hier ist dictPtr
ein Zeiger auf eine Nil-Map. Um diese Map zu verwenden, müssen Sie sie zuerst mit make
initialisieren:
*dictPtr = make(map[string]int) (*dictPtr)["Alice"] = 30
Alternativ können Sie sie einer vollständig initialisierten Map zuweisen:
initializedMap := make(map[string]int) *dictPtr = initializedMap
Es ist wichtig zu beachten, dass die alleinige Verwendung von new
nicht die notwendigen zugrunde liegenden Datenstrukturen für die Map allokiert, was zu einer Nil-Map führt, die keine Schlüssel-Wert-Paare speichern kann, bis sie ordnungsgemäß initialisiert wurde.
Hauptunterschiede zwischen make
und new
-
Initialisierung:
make
initialisiert und allokiert Speicher für die Map, wodurch sie sofort verwendbar ist. Im Gegensatz dazu allokiertnew
Speicher für einen Map-Zeiger, initialisiert aber nicht die zugrunde liegende Map, was einen zusätzlichen Schritt erfordert, um die Map verwendbar zu machen. -
Rückgabetyp:
make
gibt eine initialisierte Map zurück, währendnew
einen Zeiger auf eine Nil-Map zurückgibt.
Fazit
Das Verständnis der Unterschiede zwischen make
, new
und Map-Literalen ist für eine effektive Map-Initialisierung in Go unerlässlich. Die Funktion make
ist auf die Initialisierung von Maps, Slices und Kanälen zugeschnitten und stellt sicher, dass sie sofort einsatzbereit sind. Während new
Speicher für einen Map-Zeiger allokieren kann, initialisiert es die Map selbst nicht, was weitere Schritte erforderlich macht, bevor die Map verwendet werden kann. Map-Literale bieten eine prägnante Möglichkeit, Maps mit bekannten Schlüssel-Wert-Paaren zu deklarieren und zu initialisieren. Durch die Wahl der geeigneten Initialisierungsmethode können Sie robustere und fehlerfreiere Go-Programme schreiben.
FAQs
make
initialisiert die Map zur sofortigen Verwendung, während new
nur Speicher für einen Zeiger allokiert und die Map uninitialisiert lässt.
Verwenden Sie ein Map-Literal, wenn Sie die anfänglichen Schlüssel-Wert-Paare bei der Deklaration kennen, um einen prägnanten und lesbaren Code zu erhalten.
Der Versuch, Schlüssel-Wert-Paare einer Nil-Map zuzuweisen, führt zu einer Laufzeit-Panic, die eine ordnungsgemäße Initialisierung mit make
oder einem Map-Literal erfordert.
Wir sind Leapcell, Ihre erste Wahl für das Hosting von Go-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung - keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeit-Metriken und -Protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein operativer Overhead - konzentrieren Sie sich einfach auf den Aufbau.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ