/ Kapitel

Die Go-Standardbibliothek

Die Go-Standardbibliothek ist Gos vielleicht größte Stärke — produktionsreife Pakete für Strings, I/O, Zeit, Encoding, Crypto, Logging, HTTP, Datenbanken und mehr, alle aus einer Hand und mit kompatiblen APIs. Diese Seite ist die kuratierte Übersicht über alle hier dokumentierten Pakete, gruppiert nach Anwendungsbereich.

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, Closer und Helfer wie Copy (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 Scanner für zeilenweises Lesen (in Vorbereitung)
  • path — Slash-getrennte Pfade für URLs und virtuelle Hierarchien (in Vorbereitung)
  • path/filepath — Plattformspezifische Dateipfade mit Walk und Glob (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/v2 fü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 BuildInfo zur 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, GOMAXPROCS und 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, Post und konfigurierbarem Transport (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)
  • errorserrors.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, *Tx und context-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.

Weiterführende Ressourcen

Externe Quellen