Go · Experte
Standardkonvertierungen kopieren Speicher. Die Verwendung des unsafe-Pakets ermöglicht die Neuinterpretation des zugrunde liegenden Speicher-Headers, um Allokationen zu vermeiden, erfordert jedoch…
PerformanceBest PracticesDatentypen
Snippet öffnen →Go · Experte
Go richtet Strukturfelder basierend auf ihrer Größe aus. Große Felder sollten zuerst kommen, um Padding-Bytes zu minimieren, die der Compiler hinzufügt, um die Ausrichtung der Speicheradressen zu g…
DatentypenPerformance
Snippet öffnen →Go · Experte
sync.Pool ermöglicht die Wiederverwendung von Objekten, was die Häufigkeit von Garbage-Collection-Zyklen in Anwendungen mit hohem Durchsatz durch Recycling von zugewiesenem Speicher erheblich reduz…
PerformanceDesign PatternsAsync & Concurrency
Snippet öffnen →Go · Experte
Type-Sets in Interfaces ermöglichen es Generics, Typen auf eine bestimmte Vereinigung zu beschränken. Der Tilde-Operator (~) schließt Typen ein, die denselben zugrunde liegenden primitiven Typ teilen.
SyntaxDatentypenFunktionen
Snippet öffnen →Go · Experte
Das singleflight-Paket bietet einen Mechanismus zur Unterdrückung doppelter Funktionsaufrufe. Es stellt sicher, dass für einen bestimmten Schlüssel jeweils nur eine Ausführung einer Funktion aktiv…
PerformanceDesign Patterns
Snippet öffnen →Go · Experte
Gewichtete Semaphoren ermöglichen die Steuerung des Zugriffs auf einen gemeinsamen Ressourcenpool, bei dem verschiedene Aufgaben unterschiedliche Mengen dieser Ressource verbrauchen können. Im Gege…
Async & ConcurrencyDesign Patterns
Snippet öffnen →Go · Experte
Standard-CPU-Profiling in Go zeigt, wo Zeit in Funktionen verbracht wird, unterscheidet aber oft nicht zwischen verschiedenen Kontexten (z. B. welcher Benutzer die Last verursacht hat). pprof.Do er…
PerformanceTesting
Snippet öffnen →Go · Experte
Lock-Striping ist ein Entwurfsmuster zur Reduzierung von Ressourcenkonflikten, indem eine geteilte Ressource in mehrere unabhängige 'Shards' mit jeweils eigenem Lock aufgeteilt wird. In Umgebungen…
PerformanceDesign Patterns
Snippet öffnen →Go · Experte
Erfahrene Go-Fehlerbehandlung schichtet Kontext um die eigentliche Ursache: fmt.Errorf mit %w sowie eigene Typen mit Unwrap()-Methode. errors.As durchläuft die Kette und kopiert den ersten passende…
FehlerbehandlungDesign Patterns
Snippet öffnen →Go · Experte
Go kennt kein mehrstufiges break — ein einfaches break verlässt nur die innerste Schleife oder das innerste switch. Ein Label vor der äußeren for-Schleife macht diese ansprechbar: break Outer überg…
Kontrollstrukturen
Snippet öffnen →Go · Experte
Ein zweistelliger Slice s[low:high] erbt die volle Kapazität des Backing-Arrays bis ans Ende — ein späteres append in die Rückgabe kann unbemerkt Speicher überschreiben, auf den der Aufrufer noch z…
Arrays & ListenDatentypen
Snippet öffnen →Go · Experte
Ein naiver Vergleich wie bytes.Equal oder == auf zwei Strings bricht beim ersten Unterschied ab. Angreifer im Netz können diesen frühen Abbruch messen und einen MAC byteweise erraten — der passende…
Security
Snippet öffnen →Go · Experte
math/rand ist ein deterministischer PRNG mit globaler Seed-Quelle; aus wenigen Ausgaben kann ein Angreifer den Seed rekonstruieren und alle künftigen Tokens vorhersagen. crypto/rand zieht aus dem C…
SecurityBest Practices
Snippet öffnen →Go · Experte
Hochperformaters hochparalleles Datenhandling verzichtet oft auf Mutex-Sperren und nutzt stattdessen Compare-And-Swap (CAS) Anweisungen. Seit Go 1.19 ermöglicht `atomic.Pointer[T]` die Implementier…
Async & ConcurrencyDesign PatternsPerformance
Snippet öffnen →Go · Experte
Tiefe Fehlerdiagnose und benutzerdefinierte Observability-Tools erfordern oft die programmatische Inspektion von Aufrufstapeln ohne externe Bibliotheken. Die Kombination von `runtime.Callers` und `…
FunktionenFehlerbehandlungBest Practices
Snippet öffnen →Go · Experte
Bei der Kombination von Finalizern (`runtime.SetFinalizer`) mit nativen Handles (wie Dateideskriptoren oder C-Pointern) kann der Garbage Collector eine Struktur mitten im Methodenaufruf aufräumen,…
Best PracticesPerformanceDesign Patterns
Snippet öffnen →Go · Experte
Das Read-Copy-Update (RCU) Muster ermöglicht sperrfreie Lesezugriffe für leseintensive Datenstrukturen durch den atomaren Austausch eines unveränderlichen Instanzzeigers via `atomic.Value`. Schreib…
Async & ConcurrencyDesign PatternsPerformance
Snippet öffnen →Go · Experte
Go 1.17 und 1.20 führten unsafe.Slice, unsafe.SliceData, unsafe.String und unsafe.StringData ein, um reflexionsbasiertes Hacking von StringHeader und SliceHeader zu ersetzen. Dies ermöglicht expliz…
PerformanceSecurityDatentypen
Snippet öffnen →Go · Experte
sync.Pool verwaltet wiederverwendbare temporäre Objekte, um den Druck auf den Garbage Collector (GC) in allokationsintensiven Umgebungen drastisch zu reduzieren. Hochleistungs-Designmuster kombinie…
PerformanceDesign PatternsBest Practices
Snippet öffnen →Go · Experte
Standard-select-Blöcke in Go werten bereitstehende Fälle pseudo-zufällig aus, um Starvation zu vermeiden. Um eine deterministische Prioritätssteuerung aufzubauen, muss ein nicht-blockierender selec…
Async & ConcurrencyDesign PatternsPerformance
Snippet öffnen →Go · Experte
Das Standard-Package runtime/trace ermöglicht Entwicklern das Instrumentieren von benutzerdefinierten Tasks, Regionen und Trace-Logs. Diese Annotationen integrieren sich direkt in Ausführungstraces…
PerformanceTestingBest Practices
Snippet öffnen →Go · Experte
Sperrfreie Zustandsverwaltung kann effizient über Ganzzahl-Bitmasken mittels atomarer Compare-And-Swap (CAS) Schleifen umgesetzt werden. Dieses Muster ermöglicht nebenläufiges Flag-Toggling ohne Lo…
Async & ConcurrencyPerformanceDatentypen
Snippet öffnen →Go · Experte
Dieses Beispiel zeigt die Erstellung eines sperrfreien, threadsicheren Stapelspeichers unter Verwendung von generischen atomic.Pointer[T] aus Go 1.19+. Durch eine Compare-And-Swap (CAS) Wiederholun…
Async & ConcurrencyDatentypen
Snippet öffnen →Go · Experte
Wenn die Anzahl der zu empfangenden Kanäle erst zur Laufzeit feststeht, reichen statische Select-Blöcke nicht aus. Dieser Code nutzt reflect.Select, um dynamische Select-Fälle programmatisch zu ers…
Async & ConcurrencyKontrollstrukturen
Snippet öffnen →Go · Experte
Seit Go 1.20 unterstützt die Standardbibliothek die Unwrap() []error Methode für zusammengesetzte Fehler. Die Implementierung dieser Methode erlaubt es errors.Is und errors.As, baumartige Fehlerstr…
FehlerbehandlungBest Practices
Snippet öffnen →Go · Experte
Paralleles Testen mit Subtests erfordert die sorgfältige Handhabung von Closure-Variablen, Ressourcenbereinigung über t.Cleanup und Aufrufer-Stacktraces mittels t.Helper(). t.Cleanup garantiert das…
TestingBest Practices
Snippet öffnen →Go · Experte
Timing-Seitenkanalangriffe nutzen Laufzeitunterschiede bei Byte-Vergleichen aus. crypto/subtle.ConstantTimeCompare vergleicht Slices in konstanter Zeit, unabhängig von der Position von Abweichungen…
SecurityDatentypen
Snippet öffnen →Go · Experte
Go 1.21 hat context.AfterFunc eingeführt, wodurch ein Closure nach der Kontext-Stornierung in einer eigenen Goroutine ausgeführt wird. Der Aufruf von stopFunc hebt die Registrierung auf. Wenn stopF…
Async & ConcurrencyBest PracticesFunktionen
Snippet öffnen →Go · Experte
Modernes Go (1.20+) bietet unsafe.StringData und unsafe.Slice, um Byte-Slice-Header direkt über unveränderlichen String-Speicherbereichen ohne Heap-Allokation zu erstellen. Während Zero-Copy-Konver…
DatentypenSecurityBest Practices
Snippet öffnen →Go · Experte
Die Kombination von deferred recover() mit runtime.Callers und runtime.CallersFrames ermöglicht es Panic-Wrappern, programmatische Stack-Frame-Details (Dateipfade, Zeilennummern, Funktionsnamen) zu…
FehlerbehandlungFunktionenBest Practices
Snippet öffnen →