Go · Mittel
In Go werden Interfaces implizit implementiert. Ein Typ erfüllt ein Interface, indem er einfach dessen Methoden implementiert; es gibt kein Schlüsselwort 'implements'. Dies entkoppelt die Definitio…
patternsbestpractices
Snippet öffnen →Go · Mittel
Go 1.13+ führte Error-Wrapping mittels des %w-Verbs in fmt.Errorf ein. Dies erlaubt es, Kontext zu einem Fehler hinzuzufügen, während man weiterhin mit errors.Is auf den ursprünglichen Sentinel-Err…
errorhandlingbestpractices
Snippet öffnen →Go · Mittel
Funktionen sind in Go 'First-Class-Citizens'. Man kann benutzerdefinierte Funktionstypen definieren, was nützlich für Muster wie Strategy oder Middleware ist, da Verhalten als Argument übergeben we…
functionspatterns
Snippet öffnen →Go · Mittel
Go verwendet Struct-Embedding, um Komposition zu erreichen. Wenn ein Typ ohne Feldnamen eingebettet wird, werden seine Methoden und Felder in das äußere Struct 'befördert', sodass direkt auf sie zu…
syntaxpatterns
Snippet öffnen →Go · Mittel
Die 'select'-Anweisung lässt eine Goroutine auf mehrere Kommunikationsoperationen warten. Die Verwendung eines 'default'-Falls ermöglicht nicht-blockierendes Senden und Empfangen, das sofort ausgef…
asynccontrolflow
Snippet öffnen →Go · Mittel
Beim Verwenden von 'append' muss Go das zugrunde liegende Array eventuell neu zuweisen, wenn die Kapazität überschritten wird. Durch die Angabe einer Kapazität in 'make()' reduzieren Sie den CPU-Ov…
arraysperformance
Snippet öffnen →Go · Mittel
Das Context-Paket ist essenziell für die Steuerung von Lebenszyklen und den Abbruch nebenläufiger Prozesse. WithTimeout erstellt einen abgeleiteten Kontext, der sich nach einer bestimmten Zeit auto…
asyncbestpractices
Snippet öffnen →Go · Mittel
Die integrierte 'recover'-Funktion ermöglicht es einem Programm, die Kontrolle über eine abstürzende Goroutine zurückzugewinnen. Sie muss immer innerhalb einer 'defer'-Funktion aufgerufen werden, u…
errorhandlingcontrolflow
Snippet öffnen →Go · Mittel
Tabellengesteuertes Testen ist ein Go-Idiom, bei dem Testfälle als Slice anonymer Structs definiert werden. Dies erleichtert das Hinzufügen neuer Szenarien und sorgt für eine konsistente Testlogik.
testingbestpractices
Snippet öffnen →Go · Mittel
Eine WaitGroup wartet auf den Abschluss einer Gruppe von Goroutinen. Die Haupt-Goroutine ruft 'Add' auf, um die Anzahl der Tasks festzulegen, jeder Worker ruft 'Done' auf und 'Wait' blockiert, bis…
asyncfunctions
Snippet öffnen →Go · Mittel
In Go ist ein Slice ein Header, der einen Zeiger auf ein zugrundeliegendes Array (Backing-Array), eine Länge und eine Kapazität enthält. Das Slicen eines bestehenden Slices erstellt einen neuen Sli…
datatypesperformance
Snippet öffnen →Go · Mittel
Für sicherheitsrelevante Aufgaben wie das Generieren von Session-IDs, Token zum Zurücksetzen von Passwörtern oder API-Schlüsseln bietet die Go-Standardbibliothek das Paket crypto/rand. Im Gegensatz…
securitybestpractices
Snippet öffnen →Go · Mittel
Ein Timing-Angriff ermöglicht es einem Angreifer, Geheimnisse (wie API-Schlüssel oder Passworthashes) zu erraten, indem gemessen wird, wie lange ein Vergleich dauert. Standardmäßige String-Vergleic…
securitybestpractices
Snippet öffnen →Go · Mittel
In Go sind Strings schreibgeschützte Byte-Slices. UTF-8-Zeichen wie Emojis oder Akzente belegen mehrere Bytes. Das Slicen oder Indizieren eines Strings greift direkt auf rohe Bytes zu, was Mehrbyte…
datatypessyntax
Snippet öffnen →Go · Mittel
In Go sind Maps nicht für die gleichzeitige Verwendung (Concurrency) sicher. Wenn zwei Goroutinen gleichzeitig in eine Map schreiben oder eine liest, während eine andere schreibt, stürzt das Progra…
datatypesasyncbestpractices
Snippet öffnen →Go · Mittel
Der Typ sync.Once garantiert, dass eine Funktion über alle Goroutinen hinweg genau einmal ausgeführt wird. Dies wird häufig für die threadsichere, verzögerte Initialisierung (Lazy Initialization) v…
asyncpatternsbestpractices
Snippet öffnen →Go · Mittel
Benutzerdefinierte Fehlertypen in Go ermöglichen das Mitführen von strukturiertem Kontext neben der Fehlermeldung. Durch die Implementierung der Unwrap-Methode lässt sich der benutzerdefinierte Feh…
errorhandlingbestpractices
Snippet öffnen →Go · Mittel
Um zu verhindern, dass konkurrierende Operationen unbegrenzt blockieren, können Sie Timeouts mithilfe einer select-Anweisung in Kombination mit time.After implementieren. Die Funktion time.After gi…
asynccontrolflow
Snippet öffnen →Go · Mittel
Das context-Paket von Go ermöglicht die Weitergabe von strukturierten Abbruchsignalen und Fristen über API-Grenzen und Goroutinen hinweg. Die Verwendung eines Kontexts verhindert Ressourcenlecks, i…
asyncbestpractices
Snippet öffnen →Go · Mittel
Tabellengesteuertes Testen (Table-driven testing) ist ein idiomatisches Muster in Go. Indem eine Liste von Testfällen in einem Slice von Strukturen definiert wird, können neue Testeingaben und erwa…
testingbestpractices
Snippet öffnen →Go · Mittel
In Go kann eine Ratenbegrenzung mithilfe von time.Ticker implementiert werden. Ein Ticker sendet in regelmäßigen Abständen ein Signal über seinen Kanal C. Indem wir vor der Verarbeitung jeder Anfra…
asynccontrolflow
Snippet öffnen →Go · Mittel
Ein Worker-Pool verwaltet eine Gruppe von concurrent laufenden Goroutines, die Aufgaben aus einer gemeinsamen Warteschlange abarbeiten. Dieses Muster verhindert unkontrollierte Goroutine-Erstellung…
asyncpatterns
Snippet öffnen →Go · Mittel
Um Elemente in einem Slice zu filtern, ohne ein neues zugrundeliegendes Array zu allokieren, kann ein In-Place-Filter durchgeführt werden. Durch Beibehalten eines Index n für gültige Elemente übers…
arraysfunctions
Snippet öffnen →Go · Mittel
Das sync.WaitGroup wird verwendet, um den Ausführungsfluss zu koordinieren, wenn mehrere nebenläufige Aufgaben in separaten Goroutines gestartet werden. Durch den Aufruf von Add(1) vor dem Start ei…
asynccontrolflow
Snippet öffnen →Go · Mittel
In Go können Fehler andere Fehler umhüllen, um kontextuelle Informationen bereitzustellen, während der ursprüngliche Fehlertyp erhalten bleibt. Durch die Implementierung der Unwrap() error-Methode…
errorhandlingpatterns
Snippet öffnen →Go · Mittel
Um eine benutzerdefinierte Collection in Go mit dem Standard-Paket sort zu sortieren, implementieren Sie das sort.Interface-Interface. Dieses Interface erfordert drei Methoden: Len(), Swap(i, j int…
patternsdatatypes
Snippet öffnen →Go · Mittel
Die Standardbibliothek von Go basiert stark auf Schnittstellen wie io.Reader. Indem Sie einen vorhandenen io.Reader in einem benutzerdefinierten Struct verpacken und die Methode Read([]byte) (int,…
patternsfunctions
Snippet öffnen →Go · Mittel
Standardmäßig formatiert Gos json.Marshal Typen nach Standard-Serialisierungsregeln. Durch die Implementierung des json.Marshaler-Interfaces (Definieren einer MarshalJSON() ([]byte, error)-Methode)…
datatypesfunctions
Snippet öffnen →Go · Mittel
In Go ist ein Slice ein Header, der auf ein zugrunde liegendes Array verweist. Wenn Sie einen Sub-Slice aus einem großen Slice erstellen (z. B. largeSlice[:2]), kann der Garbage Collector das zugru…
performancearrays
Snippet öffnen →Go · Mittel
Durch die Implementierung des fmt.Formatter-Interfaces kann ein benutzerdefinierter Go-Typ genau festlegen, wie er über verschiedene Verben im fmt-Paket formatiert wird. Dies ermöglicht es Ihnen, w…
patternssyntax
Snippet öffnen →