CASOON Tutorial
Go lernen, indem du einen echten Dienst baust.
Kein Syntax-Kurs, sondern Go für echte Projekte: In 16 Teilen entsteht upwatch, ein URL-Monitor mit HTTP-API, parallelen Checks, SQLite, Tests, Logging, Graceful Shutdown und einem einzelnen Binary zum Deployen. Für Entwickler, die aus C#, Java oder TypeScript kommen.
$ curl -sd '{"url":"https://example.com"}' \ :8080/targets | jq -c '{id, url}' {"id":1,"url":"https://example.com"} $ curl -sd '{"url":"https://nope.invalid"}' \ :8080/targets | jq -c '{id, url}' {"id":2,"url":"https://nope.invalid"} $ curl -s :8080/targets/1/results \ | jq -c '.[0] | {status_code, duration_ms}' {"status_code":200,"duration_ms":198} $ curl -s :8080/targets/2/results | jq '.[0].up' false
- Teile, ein durchgehendes Projekt
- 16
- direkte Abhängigkeit: der SQLite-Treiber, ohne cgo
- 1
- statisches Linux-Binary inklusive Datenbank
- 12 MB
- Zielplattformen aus einem Befehl: make build-all
- 4
Der Weg durch das Tutorial
Grundlagen
Die Sprache und ihre Denkweise – an Beispielen aus upwatch.
- Warum gibt es Go?upwatch starten und mit curl ausprobieren
- Toolchain und Modulego build, test, vet, Module und govulncheck
- Die Sprache, kompaktStructs, Slices, Maps, Interfaces, Generics
- Go-Denkweise statt OOP-DenkweiseKleine Interfaces, Composition, DI ohne Container
- FehlerbehandlungErrors wrappen, prüfen, an der Grenze übersetzen
- ConcurrencyDer Worker-Pool des Schedulers
- Context richtig verstehenAbbruch und Timeouts vom Request bis zur Datenbank
Die Anwendung
upwatch entsteht: API, Struktur, Datenbank, Tests, Betrieb.
- Eine HTTP-API mit net/httpDie JSON-API mit net/http und Middleware
- Projektstruktur und Architekturcmd/, internal/ und Packages, die tragen
- Datenbanken mit database/sqlSQLite, Transaktionen, Migrationen
- TestingTabellen-Tests, httptest, Fakes, synctest, Fuzzing
- Logging, Konfiguration, Observabilityslog, Konfiguration, Metriken, Graceful Shutdown
Produktion
Absichern, messen, ausliefern – und was Umsteiger falsch machen.
Worum es geht
Ein Projekt statt 16 Inseln
Jedes Kapitel erklärt ein Stück von upwatch: Context am echten Request, Concurrency am echten Worker-Pool, Testing an den echten Tests. Kein Todo-Service.
Go-Denkweise statt OOP-Import
Kleine Interfaces beim Konsumenten, konkrete Structs, explizite Fehler, Dependency Injection ohne Container – und warum IUserService und BaseRepository hier nicht hingehören.
Standardbibliothek zuerst
net/http mit Routing-Patterns, log/slog, database/sql, expvar, pprof, testing/synctest. Frameworks werden eingeordnet, nicht vorausgesetzt.
Bis in die Produktion
Timeouts, SSRF-Schutz, govulncheck, Cross-Compilation, distroless Container und eine gehärtete systemd-Unit. Der Code im Repo ist getestet, auch mit dem Race Detector.
Loslegen
Du brauchst Go ab 1.26 und curl. Der Code ist fertig und getestet: Du startest upwatch in Teil 1 und lernst es danach Baustein für Baustein kennen – mit einem „Jetzt du“ in jedem Kapitel und Übungen in drei Stufen.
- Repository klonen und upwatch mit
make runstarten. - Eine URL anlegen – der Scheduler prüft sie sofort und danach im Intervall.
- Mit Teil 1: Warum gibt es Go? beginnen.
git clone https://github.com/casoon/go-tutorial
cd go-tutorial
make run # go run ./cmd/upwatch on :8080
curl -s -d '{"url":"https://example.com"}' :8080/targets
curl -s :8080/targets/1/results