Go wird oft mit dem Schlagwort „batteries included" beschrieben — und kein Teil der Sprache rechtfertigt dieses Etikett so eindrücklich wie ihre Standardbibliothek. Wo andere Ökosysteme erst durch Dutzende kuratierte Drittpakete produktionsreif werden, liefert Go ab go install eine zusammenhängende Sammlung mit, die HTTP-Server, JSON-Encoding, TLS, kryptografische Primitive, strukturiertes Logging, Templating, reguläre Ausdrücke und Dateisystem-Abstraktionen abdeckt. Alle Pakete teilen dieselbe Designkultur, dieselben Konventionen und dieselbe Kompatibilitätsgarantie.
Die offizielle Referenz liegt unter pkg.go.dev/std. Hier auf mibeon findest du die deutschsprachige, kuratierte Auswahl mit ausführlichen Erklärungen, Praxis-Beispielen und Stolperfallen — geordnet nach Anwendungsbereich, damit du das richtige Paket findest, bevor du nach einer Drittbibliothek greifst. Genau dieses Vorgehen — erst Stdlib, dann extern — ist in der Go-Community als Standard Library First etabliert.
Warum die Go-Stdlib so gut ist
Der erste Grund ist die Konsistenz der Interfaces. io.Reader und io.Writer sind zwei winzige Interfaces mit jeweils einer Methode — und doch ziehen sie sich durch die gesamte Bibliothek. Eine *os.File, eine *bytes.Buffer, ein *strings.Reader, der Body eines *http.Response, ein gzip.Reader, ein crypto/cipher.StreamReader: alles erfüllt dieselben Interfaces. Das Ergebnis ist Komposition statt Adapter-Schichten. Du kannst einen HTTP-Response-Body direkt in einen JSON-Decoder stecken, der wiederum in einen tee zu einem Hash schreibt, der wiederum komprimiert wird — ohne Glue-Code, ohne fremde Abstraktionen. Diese Konsistenz ist kein Zufall, sondern das Resultat eines API-Reviews, das jedes Paket der Stdlib seit Jahren durchläuft.
Der zweite Grund ist das Kompatibilitätsversprechen aus Go 1 and the Future of Go Programs. Code, der gegen Go 1.0 von 2012 kompiliert, läuft heute unter Go 1.23 unverändert. Funktionssignaturen werden nicht gebrochen, Verhalten wird nicht stillschweigend geändert. Wenn ein Paket veraltet, wandert es in eine Deprecated-Note — aber die alte API bleibt erhalten. Für Bibliotheksautoren bedeutet das: Dependencies auf die Stdlib altern nicht. Für Anwendungsentwicklung bedeutet es, dass dein Upgrade-Pfad zwischen Go-Versionen praktisch immer kostenlos ist.
Der dritte Grund ist Performance. Die Stdlib ist in fast allen Bereichen die schnellste Pure-Go-Implementierung, die du finden wirst. encoding/json wurde über Jahre profiliert und optimiert; net/http skaliert ohne externen Tuningaufwand auf zehntausende gleichzeitige Verbindungen; crypto/sha256 nutzt SIMD-Beschleunigung auf moderner Hardware; sort und slices.Sort verwenden pattern-defeating Quicksort. Wenn überhaupt eine externe Library schneller ist, dann meist nur über unsafe oder Assembly — und der Trade-off zwischen marginalem Speed-Up und einem zusätzlichen Maintenance-Risiko fällt fast immer zugunsten der Stdlib aus.
Kuratierte Übersicht der dokumentierten Pakete
Im Folgenden findest du alle Pakete, die hier auf mibeon dokumentiert werden, gruppiert nach Anwendungsbereich. Pakete mit „(in Vorbereitung)" haben noch keinen Artikel — der Link bleibt aber stabil, sodass du Lesezeichen schon jetzt setzen kannst.
Allgemein und Strings
Die Brot-und-Butter-Pakete für Textverarbeitung, Formatierung und Konvertierung. Wer Go schreibt, importiert mindestens eines davon in jeder Datei.
- fmt — Formatierte I/O mit
Printf-Familie und Scan-Funktionen - strings — Funktionen für UTF-8-Strings: Suchen, Ersetzen, Splitten, Builder
- strconv — Konvertierung zwischen Strings und numerischen Basistypen
- bytes — Dieselben Operationen wie
strings, aber für[]byte - unicode — Unicode-Eigenschaften, Kategorien, Case-Folding (in Vorbereitung)
- unicode/utf8 — Kodierung und Dekodierung von UTF-8-Sequenzen (in Vorbereitung)
- regexp — Reguläre Ausdrücke nach RE2-Syntax, linear in der Eingabelänge (in Vorbereitung)
I/O und Dateien
Lesen, Schreiben, Streamen, Dateisysteme abstrahieren und Prozesse starten — alles über die gleichen Reader/Writer-Interfaces.
- io — Die zentralen Interfaces
Reader,Writer,Closerund Helfer wieCopy(in Vorbereitung) - io/fs — Read-only-Dateisystem-Abstraktion für
embed, Tests und virtuelle FS (in Vorbereitung) - os — Betriebssystem-Funktionen: Dateien, Umgebungsvariablen, Prozessinformationen (in Vorbereitung)
- os/exec — Externe Kommandos starten und deren I/O kontrollieren (in Vorbereitung)
- os/signal — Unix-Signale abfangen für graceful Shutdown (in Vorbereitung)
- bufio — Gepufferte I/O mit
Scannerfür zeilenweises Lesen (in Vorbereitung) - path — Slash-getrennte Pfade für URLs und virtuelle Hierarchien (in Vorbereitung)
- path/filepath — Plattformspezifische Dateipfade mit
WalkundGlob(in Vorbereitung) - embed — Dateien zur Compile-Zeit ins Binary einbetten (in Vorbereitung)
Zeit, Mathe und Sortierung
Zeitarithmetik, numerische Grundlagen und die generischen Sammlungs-Pakete der modernen Go-Versionen.
- time — Zeitpunkte, Dauern, Zeitzonen, Timer und Tickers (in Vorbereitung)
- math — Mathematische Konstanten und Funktionen für
float64(in Vorbereitung) - math/rand — Pseudozufall mit
math/rand/v2für nicht-kryptografische Zwecke (in Vorbereitung) - math/big — Beliebig große Integer, Rationals und Floats (in Vorbereitung)
- sort — Klassisches Sortieren über
sort.Interface(in Vorbereitung) - slices — Generische Slice-Operationen:
Sort,Contains,Index,Delete(in Vorbereitung) - maps — Generische Map-Helfer:
Keys,Values,Clone,Equal(in Vorbereitung) - cmp — Vergleichsfunktionen und
Ordered-Constraint für Generics (in Vorbereitung)
Encoding und Templates
Daten zwischen Go-Strukturen und externen Repräsentationen wandeln — von JSON über CSV bis zu HTML-Templates mit Auto-Escaping.
- encoding/json — Marshal/Unmarshal mit Struct-Tags und Streaming-Decoder (in Vorbereitung)
- encoding/xml — XML-Encoding mit Tag- und Attribute-Mapping (in Vorbereitung)
- encoding/csv — RFC-4180-konformer CSV-Reader und -Writer (in Vorbereitung)
- encoding/base64 — Base64-Kodierung in Standard- und URL-Varianten (in Vorbereitung)
- encoding/hex — Hex-Strings für Hashes, Token und Debug-Output (in Vorbereitung)
- text/template — Textgenerierung mit Pipelines, Funktionen und Bedingungen (in Vorbereitung)
- html/template — Wie
text/template, aber mit kontextuellem HTML/JS/CSS-Escaping (in Vorbereitung)
Crypto und Hashing
Kryptografische Primitive und Hash-Funktionen. Konstant-Zeit-Vergleiche, sichere Zufallszahlen und ausgereifte TLS-Implementierung gehören zum Standardumfang.
- crypto/sha256 — SHA-256-Hashing für Signaturen, Fingerprints und HMAC (in Vorbereitung)
- crypto/hmac — Message Authentication Codes mit konstanter Vergleichszeit (in Vorbereitung)
- crypto/rand — Kryptografisch sichere Zufallsquelle des Betriebssystems (in Vorbereitung)
- crypto/aes — AES als Block-Cipher, meist in Kombination mit
cipher.GCM(in Vorbereitung) - crypto/tls — TLS-1.3-Client und -Server, eingebettet in
net/http(in Vorbereitung) - crypto/x509 — X.509-Zertifikate parsen, validieren und ausstellen (in Vorbereitung)
- hash/crc32 — Nicht-kryptografische Prüfsummen für Integritätschecks (in Vorbereitung)
- hash/fnv — Schnelles FNV-Hashing für Hash-Tabellen und Bloom-Filter (in Vorbereitung)
Logging und Debug
Strukturiertes Logging, Panics, Stacktraces und Build-Info — alles aus der Stdlib, ohne externe Loggingbibliothek.
- log — Klassischer textbasierter Logger mit Präfix und Flags (in Vorbereitung)
- log/slog — Strukturiertes Logging mit Levels, Attributen und JSON-Handler (in Vorbereitung)
- runtime/debug — Stacktraces, GC-Tuning und
BuildInfozur Laufzeit (in Vorbereitung)
Reflection und Runtime
Die unteren Schichten: Typen zur Laufzeit inspizieren, Goroutinen-Stats abfragen, Speicher direkt manipulieren. Mit Vorsicht zu genießen, aber unverzichtbar.
- reflect — Typen und Werte zur Laufzeit inspizieren und manipulieren (in Vorbereitung)
- runtime — Goroutine-Anzahl, GC-Steuerung,
GOMAXPROCSund Profile (in Vorbereitung) - unsafe — Pointer-Konvertierungen außerhalb des Typsystems (in Vorbereitung)
Netzwerk-Basics
URL-Parsing, HTTP-Client, Mail-Adressen und SMTP. Der HTTP-Server-Teil hat einen eigenen Bereich (siehe unten).
- net/url — URLs parsen, bauen und Query-Strings kodieren (in Vorbereitung)
- net/http (Client-Teil) — HTTP-Client mit
Get,Postund konfigurierbaremTransport(in Vorbereitung) - net/mail — RFC-5322-Adressen und Mail-Header parsen (in Vorbereitung)
- net/smtp — Minimaler SMTP-Client zum Versenden via Relay (in Vorbereitung)
Stdlib-First-Prinzip
In Go gilt eine Faustregel, die du in jedem ernsthaften Codebase wiederfindest: erst die Stdlib prüfen, dann erst nach einer Drittbibliothek suchen. Das ist kein Dogma, sondern Pragmatismus. Jede externe Dependency vergrößert deinen Build, verlängert deinen Security-Audit-Aufwand, bringt potenziell ein eigenes Versionsschema mit und kann morgen aufgegeben werden. Die Stdlib bringt nichts davon mit — sie ist Teil der Toolchain, die du sowieso installierst.
Die unterschätzten Stdlib-Pakete sind oft genau die, für die historisch eine Drittlibrary etabliert war. log/slog (seit Go 1.21) ersetzt für die allermeisten Anwendungen Logrus, Zap oder Zerolog — mit JSON-Handler, Levels, Attributen und Handler-Komposition. slices und maps (seit Go 1.21) erübrigen lo, lodash-Ports und die meisten Generic-Sammlungs-Pakete; slices.SortFunc, slices.Contains, maps.Keys decken 90 Prozent der täglichen Bedürfnisse ab. net/http mit ServeMux und Patterns (seit Go 1.22) ist für viele REST-APIs ausreichend und erspart Gin, Chi oder Echo — und für die Fälle, in denen ein Router doch sinnvoll ist, bleibt der Wechsel klein. Auch encoding/json ist mit Decoder.DisallowUnknownFields und RawMessage deutlich mächtiger, als die meisten Tutorials vermuten lassen.
Die ehrliche Antwort lautet trotzdem: manchmal lohnt sich eine Library. Aber die Frage „Was kann die Stdlib hier?" muss als erste gestellt werden — nicht als letzte, nachdem schon go get getippt wurde.
Was nicht hier zu finden ist
Einige Stdlib-Pakete haben so viel Substanz, dass sie eigene Kapitel auf mibeon bekommen, statt unter „Standardbibliothek" einsortiert zu werden:
- context — Deadlines, Cancellation und Request-Scoped Values (Kapitel 12: Sync & Context)
- sync und sync/atomic — Mutexes, WaitGroups und Lock-Free-Operationen (Kapitel 12: Sync & Context)
- errors —
errors.Is,errors.As, Wrapping und Sentinel-Errors (Kapitel 9: Error-Handling) - testing — Unit-Tests, Table-Driven Tests, Benchmarks und Fuzzing (Kapitel 17: Testing — in Vorbereitung)
- database/sql — Datenbankzugriff mit Treibern,
*Txundcontext-Integration (Kapitel 16: Datenbanken — in Vorbereitung) - net/http (Server-Teil) —
http.Handler,ServeMux, Middleware-Patterns (Kapitel 15: HTTP-Server — in Vorbereitung)
Diese Pakete tauchen in ihren jeweiligen Kapiteln im inhaltlichen Kontext auf — context wird erst sinnvoll, wenn du Goroutinen hast; database/sql erst, wenn du eine Datenbank brauchst. Die Aufteilung folgt also Lerngewohnheit, nicht Paketgrenzen.