Die überraschende Falle der Speicherzuweisung in Go: Eine Geschichte von 30% Regressionsrate
2025-04-21
Eine scheinbar harmlose Refactoring in einem Go-Projekt führte zu einer Performance-Regression von 30%. Der Übeltäter war die `GetBytes`-Methode der `ImmutableValue`-Struktur, die einen Wertreceiver verwendete und somit bei jedem Aufruf eine Heapallokation verursachte. Heapallokationen sind deutlich teurer als Stackallokationen. Die Ursache lag in der ungenauen Escape-Analyse des Go-Compilers; er konnte nicht erkennen, dass der Wertreceiver nicht entweichen würde. Die Umstellung auf einen Pointerreceiver behob das Problem. Dieses Beispiel verdeutlicht die Bedeutung des Verständnisses der Speicherzuweisungsentscheidungen des Go-Compilers und der Verwendung geeigneter Receiver-Typen für performanten Go-Code.
Entwicklung
Speicherzuweisung