# Golang Kurz-Paper, CLT 2025 ## Was ist Golang? Go, auch bekannt als Golang, ist eine effiziente, kompakte und plattformunabhängige Programmiersprache, die von Google entwickelt wurde. Sie zeichnet sich durch einfache Syntax, hohe Performance und integrierte Unterstützung für Parallelität und Concurrency aus, wodurch sie ideal für Serveranwendungen und Cloud-basierte Systeme ist. ## We are ugly, but we have the music Go ist nicht schön oder elegant. Man schreibt deutlich mehr Zeilen als bei anderen Programmiersprachen. Insbesondere die explizite Behandlung von möglichen Fehlern irritiert anfangs. ## Compiled Go ist "compiled". Der Quelltext wird zu einer ausführbaren Datei kompiliert. Diese "exe" enthält die Runtime, die sich z.B. um Garbage Collection kümmert. Es muss zur Laufzeit also keine Runtime bereitgestellt werden (vgl. JVM bei Java). ## Max Speed? Aufgrund der automatischen Speicherverwaltung ist Go nicht so schnell wie C, C++ oder Zig. Die Integration von C/C++-Bibliotheken ist auch nicht so einfach wie bei Python. ## if err != nil Explizite Fehlerbehandlung: ```Go result, err := someFunction(someString) if err != nil { return fmt.Errorf("someFunction failed: %q: %w", someString, err) } ... ``` ## Abwärtskompatibilität Dem Go-Team ist Abwärtskompatibilität sehr wichtig. Code, der heute geschrieben wird, wird auch in zehn Jahren noch funktionieren. ## Go Please `gopls` Go Language Server: Integration for editors. ## Static Typing: Refactoring at Day 2 Warum sollte ich am Tag 1 mehr tippen? Weil am Tag 2 der Code umgestellt wird, und dort statische Typisierung deutlich hilft. ## Concurrency Aus meiner Sicht ist Concurrency in Go sehr gut gelöst. Es gibt keine asynchronen Funktionen. Wenn der Aufrufer eine Funktion asynchrone Ausführung wünscht, dann kann das per `go someFunc(...)` entsprechend ausgeführt werden. Neben Goroutines gibt es Channels, damit Goroutines untereinander kommunizieren können. [Go Proverbs](https://go-proverbs.github.io/) > Don't communicate by sharing memory, share memory by communicating. Der `ctx` (Context) wird zu fast jedem Funktionsaufruf durchgereicht. Das ermöglicht, dass Goroutinen auch schnell und explizit beendet werden können. ## Go Module und Pakete Übliches Setup: In einem Git-Repo ist genau ein Go-Modul. Dieses Go-Modul enthält N Packages. Um Pakete zu veröffentlichen, ist kein zentraler Package-Server (vgl. Python PyPi) nötig. Pakete können direkt über ein Git-Repo eingebunden werden. Mittels `go.mod` und `go.sum` werden die Abhängigkeiten verwaltet. ## Keine Objekt-Orientierung Anfangs mag man OOP vermissen. Aber langfristig bleibt der Quelltext ohne OOP einfacher und damit leichter zu lesen und zu debuggen. ## Generics Seit kurzem gibt es Generics in Go. Die Pakete `slices` und `maps` sind praktisch. Nur sehr selten muss man selber generische Funktionen schreiben (meine bisherige Erfahrung). ## Some Third Party Packages ... ## Anwendungen, die in Go geschrieben sind Docker, Kubernetes, Hugo, ... ## Web Framework like Django? Nein, gibt es nicht. Wenn du Django möchtest, dann nimm Django (und Python). ## Go vs Python Ich habe 20 Jahre mit Python entwickelt, und seit 2 Jahren nutze ich Go. Beide Programmiersprachen sind sehr unterschiedlich, sodass ich auf keinen Fall sagen kann, dass eine Sprache besser ist als die andere. Go verbraucht deutlich weniger Hauptspeicher und ist deutlich schneller zur Laufzeit. Python ist anfangs ggf. etwas einfacher und hat sehr gute Bibliotheken für SQLite und Machine-Learning. ## End of Kurz-Paper Ich hoffe, dass ich mit diesem Kurz-Paper Interesse für den Vortrag geweckt habe. Im Vortrag gibt es dann mehr Details und die Möglichkeit, Fragen zu stellen.