Zunächst werde ich kurz die Struktur des Buches Kapitel für Kapitel analysieren, dann ein Fazit schreiben und die Vor- und Nachteile des Buches auflisten.
Lehrbuch
Dieses einführende Kapitel behandelt die Arbeit mit der Programmiersprache Go. Es geht auf die Herkunft der Sprache ein, zeigt ein „Hello World“-Beispiel, erklärt Ausführung und Kompilierung, das Konzept von Modulen (Paketen), Funktionsdefinitionen, Code-Formatierung, den Umgang mit Kommandozeilenargumenten, Variablendeklarationen und eine Einführung in die for-Schleife. Außerdem wird die Suche nach wiederholten Zeichenfolgen auf verschiedene Arten, die Arbeit mit Bildern und URLs sowie die Erstellung eines einfachen Webservers behandelt.
Programmstruktur
Dieses Kapitel behandelt reservierte Wörter, die Benennung von Variablen, Funktionen und Konstanten. Es wird erklärt, wie Variablen deklariert werden (mit var, const, type, func), was weggelassen werden kann und wie mehrere Deklarationen gruppiert werden. Zeiger und die Erstellung von Variablen mit der Funktion new werden im Detail behandelt. Auch Lebensdauer und Sichtbarkeit von Variablen sowie Wertzuweisungen werden erklärt. Die Verwendung von externen Paketen, Imports und Datenkapselung werden ebenfalls thematisiert.
Grundlegende Datentypen
Dieses Kapitel behandelt Zahlen (Ganzzahlen, Fließkommazahlen), binäre und bitweise Operatoren und deren Priorität sowie den Vergleich von Zahlen. Die Verwendung von komplexen Zahlen in Go wird erläutert, ebenso boolesche Werte. Zeichenketten, Escape-Sequenzen und String-Literale sowie Runes für Unicode-Zeichen werden behandelt. Auch die Konvertierung von Strings in Zahlen und umgekehrt wird besprochen. Konstanten und Pseudo-Enums werden ebenfalls betrachtet.
Komplexe Datentypen
Dieses Kapitel befasst sich mit komplexeren Datentypen: Arrays (feste Länge), Slices (dynamische Sequenzen), Maps (Key-Value-Sammlungen) und Strukturen. Es wird erklärt, wie man sie erstellt, initialisiert, vergleicht und grundlegende Funktionen verwendet. Es gibt mehrere Beispiele zur Arbeit mit Maps. Strukturen werden ausführlich behandelt, einschließlich JSON-Verarbeitung mit den Funktionen Marshal und Unmarshal. Abschließend gibt es ein Beispiel für die Arbeit mit HTML in Go.
Funktionen
Ein recht umfangreiches Kapitel über Funktionen. Es beginnt mit theoretischem Material und zeigt dann ein Beispiel für die rekursive Verarbeitung von HTML. Mehrfacher Rückgabewert und eines der Schlüsselelemente der Sprache — Fehlerprüfung mit if err != nil — werden erklärt. Anonyme und variadische Funktionen (mit variabler Parameteranzahl) werden ebenfalls im Detail behandelt.
Methoden
Da Go kein klassisches OOP-Modell besitzt, erfolgt die Arbeit mit Objekten über Strukturen und Methoden (Funktionen, die an Strukturen gebunden sind). Das Kapitel erklärt Kapselung und zeigt, wie dieselbe Aufgabe sowohl mit einer normalen Funktion als auch mit einer Methode umgesetzt werden kann.
Interfaces
Dieses Kapitel befasst sich mit der Erstellung und Verwendung von Interfaces. Es beginnt mit einer theoretischen Einführung in den Zweck von Interfaces und deren Implementierung. Standardinterfaces für Sortierung, Webserver und Fehlerbehandlung werden behandelt. Ebenso geht es um Typdeklarationen und Fehlerbehandlung. Während zuvor JSON behandelt wurde, wird hier die Arbeit mit XML erläutert.
Goroutinen und Kanäle. Nebenläufigkeit
Zwei Kapitel widmen sich der nebenläufigen Programmierung. Das erste ist eher theoretisch und führt die grundlegenden Konzepte ein, insbesondere Kanäle (inklusive gepufferte und unidirektionale Kanäle) und die select-Anweisung.
Das zweite Kapitel enthält weniger Beispiele, konzentriert sich jedoch auf potenzielle Probleme bei Nebenläufigkeit (z. B. Race Conditions) und zeigt Lösungen mit sync.Mutex und sync.RWMutex.
Pakete und Go-Tools
Obwohl das Konzept von Paketen und Modulen zuvor schon erwähnt wurde, geht dieses Kapitel ausführlicher darauf ein. Es behandelt Importregeln, den Einsatz von Drittanbieterbibliotheken und nicht nur die Standardbibliothek.
Der zweite Teil des Kapitels ist Go-Tools gewidmet: Kompilierung, Paket- und Abhängigkeitsverwaltung, Testen und mehr. Auch die Organisation der Arbeitsumgebung und der Verzeichnisstruktur wird erklärt.
Tests
Eines der letzten Kapitel widmet sich dem Testen mit Go (go test), das bereits im vorherigen Kapitel kurz angesprochen wurde. Auch Drittanbieterbibliotheken für Tests werden erwähnt. Es geht um typische Themen wie: Warum Tests wichtig sind, wie man gute und schlechte Tests schreibt, fragile Tests, Codeabdeckung und so weiter.
Reflexion und Low-Level-Programmierung
Die letzten beiden, recht kurzen Kapitel sind für fortgeschrittene Entwickler gedacht. Das erste behandelt Reflexion — z. B. bei der Erstellung eigener statischer Analysewerkzeuge. Das zweite befasst sich mit Low-Level-Programmierung: Wenn Go nicht mehr ausreicht und man auf C-Bibliotheken oder Systemaufrufe zurückgreifen muss.
Fazit
Für wen ist das Buch geeignet?
Für alle, die Go von Grund auf lernen wollen, aber auch für jene, die bereits Erfahrung mit der Sprache haben und ihr Wissen systematisieren und vertiefen möchten.
Vorteile:
- Leicht und verständlich geschrieben.
- Klar strukturierter Aufbau – jedes Kapitel baut logisch auf dem vorherigen auf.
- Viele Codebeispiele.
- Praktische Übungen am Ende jedes Kapitels.
Nachteile:
- Unklar, ob das Buch aktualisiert wurde – neuere Sprachfeatures wie Generics fehlen.
- Über 400 Seiten – für Leser, die nicht an umfangreiche Fachliteratur gewöhnt sind, kann das abschreckend sein.