Go ist eine kompilierte, statisch typisierte Sprache mit Garbage Collector. Entworfen wurde sie, weil große Systeme bei Google mit C++ und Java zu langsam zu bauen und zu kompliziert waren. Die Ziele: Einfachheit, Lesbarkeit, schnelle Builds und gute Nebenläufigkeit.
Eigenschaften
- Schnelles Übersetzen: Auch große Projekte sind in Sekunden gebaut
- Ein Binärprogramm:
go builderzeugt eine einzelne Datei ohne Laufzeit-Abhängigkeiten, ideal für Server und Container - Nebenläufigkeit durch Goroutinen und Channels
- Garbage Collector statt manueller Speicherverwaltung
- Eine Art, Dinge zu tun:
gofmtformatiert Code einheitlich, wenige Sprachmittel - Umfangreiche Standardbibliothek (HTTP-Server, JSON, Tests, Kryptografie)
- Strukturelle Typisierung von Interfaces: ohne
implements - Keine Klassen, keine Vererbung, keine Ausnahmen, bis Version 1.18 keine Generics (inzwischen vorhanden)
Wo wird Go eingesetzt?
| Bereich | Beispiele |
|---|---|
| Cloud und Infrastruktur | Docker, Kubernetes, Terraform, Prometheus |
| Webdienste und APIs | Microservices, Backends |
| Kommandozeilenwerkzeuge | GitHub CLI, Hugo, Caddy |
| Netzwerk und Datenbanken | CockroachDB, InfluxDB |
Werkzeuge
| Befehl | Zweck |
|---|---|
go run main.go | übersetzen und ausführen |
go build | Programm erzeugen |
go test ./... | alle Tests ausführen |
go fmt ./... | Code formatieren |
go vet ./... | verdächtigen Code finden |
go mod init name | neues Modul anlegen |
go get paket | Abhängigkeit hinzufügen |
go doc fmt.Println | Dokumentation ansehen |
Dein erstes Programm
package main
import "fmt"
func main() {
fmt.Println("Hallo, Welt!")
}Hallo, Welt!
package mainkennzeichnet ein ausführbares Programmimport "fmt"holt das Paket für formatierte Ein- und Ausgabefunc main()ist der Einstiegspunkt- Es gibt keine Semikolons (der Compiler setzt sie automatisch) und die geschweiften Klammern stehen immer in der Zeile des Kopfes
Ungenutztes ist ein Fehler
Go ist streng: Eine importierte, aber nicht benutzte Bibliothek oder eine nicht benutzte Variable ist ein Compilerfehler. Das hält den Code sauber:
package main
import "fmt"
func main() {
ungenutzt := 5
fmt.Println("Hallo")
}declared and not used: ungenutzt
So führst du den Code aus: Go installieren (go.dev). Datei main.go speichern und mit go run main.go starten. Für Projekte go mod init name anlegen, mit go build ein einzelnes Programm erzeugen.
Merke
- Go ist kompiliert, schnell, einfach und für Server und Cloud gebaut
go run,go build,go test,go fmtsind die Alltagswerkzeuge- Ein Programm beginnt in
package mainmitfunc main() - Ungenutzte Variablen und Importe sind Fehler
- Stärken: Goroutinen, Standardbibliothek, ein einziges Binärprogramm