Menu
Coddy logo textTech

Go Spickzettel

Zuletzt aktualisiert

Hello World & Programmaufbau

Jedes Go-Programm liegt in einem Package; der Einstiegspunkt ist func main im Package main.

OperationSyntax
Package-Deklarationpackage main
Ein Package importierenimport "fmt"
Mehrere Packages importierenimport (\n "fmt"\n "os"\n)
Einstiegspunktfunc main() { ... }
Eine Zeile ausgebenfmt.Println("Hello, World!")
Formatierte Ausgabefmt.Printf("%d items\n", n)
Eine Datei ausführengo run main.go
Eine Binärdatei bauengo build

Variablen & Typen

Go ist statisch typisiert, kann Typen aber mit := ableiten.

OperationSyntax
Mit Typ deklarierenvar age int = 30
Mit Inferenz deklarierenvar name = "Ada"
Kurze Deklarationcount := 0
Mehrere auf einmalx, y := 1, 2
Konstanteconst Pi = 3.14
Nullwerte0, "", false, nil
Basistypenint, float64, string, bool, byte, rune
Typumwandlungf := float64(i)

Kontrollfluss

Go hat ein einziges Schleifen-Schlüsselwort - for - und keine Klammern um Bedingungen.

OperationSyntax
If / elseif x > 0 { ... } else { ... }
If mit Init-Anweisungif v, ok := m[k]; ok { ... }
For-Schleife (C-Stil)for i := 0; i < 10; i++ { ... }
While-artige Schleifefor x < 100 { ... }
Endlosschleifefor { ... }
Range über ein Slicefor i, v := range items { ... }
Switchswitch day { case 1: ...; default: ... }
Switch ohne Ausdruckswitch { case x > 0: ... }
Break / continuebreak, continue

Funktionen

Funktionen sind Werte erster Klasse und können mehrere Ergebnisse zurückgeben.

OperationSyntax
Einfache Funktionfunc add(a int, b int) int { return a + b }
Gemeinsamer Parametertypfunc add(a, b int) int { ... }
Mehrere Rückgabewertefunc divmod(a, b int) (int, int) { return a / b, a % b }
Benannte Rückgabewertefunc split(sum int) (x, y int) { x = sum / 2; return }
Variadische Funktionfunc sum(nums ...int) int { ... }
Anonyme Funktionf := func() { ... }
Closurefunc counter() func() int { ... }
Defer (läuft beim Return)defer file.Close()

Slices & Arrays

Arrays haben eine feste Größe; Slices sind dynamische Sichten auf Arrays.

OperationSyntax
Array fester Größevar a [3]int
Slice-Literalnums := []int{1, 2, 3}
Ein Slice erstellens := make([]int, 0, 10)
Anhängens = append(s, 4)
Länge / Kapazitätlen(s), cap(s)
Ein Slice teilens[1:3]
Kopierencopy(dst, src)
Durchlaufenfor i, v := range s { ... }

Maps

Maps sind die eingebauten Hashtabellen von Go.

OperationSyntax
Eine Map erstellenm := make(map[string]int)
Map-Literalm := map[string]int{"a": 1, "b": 2}
Einen Wert setzenm["c"] = 3
Einen Wert lesenv := m["a"]
Existenz prüfenv, ok := m["x"]
Einen Schlüssel löschendelete(m, "a")
Längelen(m)
Durchlaufenfor k, v := range m { ... }

Structs & Methoden

Structs gruppieren Felder; Methoden hängen Verhalten über einen Empfänger an.

OperationSyntax
Ein Struct definierentype Point struct { X, Y int }
Eine Instanz erstellenp := Point{X: 1, Y: 2}
Auf ein Feld zugreifenp.X
Zeiger auf ein Structp := &Point{1, 2}
Methode mit Wert-Empfängerfunc (p Point) Dist() float64 { ... }
Methode mit Zeiger-Empfängerfunc (p *Point) Move(dx int) { p.X += dx }
Eingebettetes Structtype Circle struct { Point; R int }
Struct-TagsName string mit einem in Backticks gesetzten json:"name"-Tag

Interfaces

Interfaces werden implizit erfüllt - jeder Typ mit den passenden Methoden qualifiziert sich.

OperationSyntax
Ein Interface definierentype Shape interface { Area() float64 }
Implementieren (implizit)func (c Circle) Area() float64 { ... }
Leeres Interface (any)var x interface{} oder var x any
Typzusicherungs, ok := x.(string)
Type Switchswitch v := x.(type) { case int: ... }
Stringer-Interfacefunc (p Point) String() string { ... }

Goroutinen & Channels

Goroutinen sind leichtgewichtige Threads; Channels reichen Werte zwischen ihnen weiter.

OperationSyntax
Eine Goroutine startengo doWork()
Einen Channel erstellench := make(chan int)
Gepufferter Channelch := make(chan int, 5)
An einen Channel sendench <- 42
Von einem Channel empfangenv := <-ch
Einen Channel schließenclose(ch)
Range über einen Channelfor v := range ch { ... }
Select auf Channelsselect { case v := <-ch: ...; default: ... }
Wait Groupvar wg sync.WaitGroup; wg.Add(1); wg.Wait()
Mutexvar mu sync.Mutex; mu.Lock(); mu.Unlock()

Fehlerbehandlung

Go gibt Fehler als Werte zurück - es gibt keine Exceptions.

OperationSyntax
Einen Fehler zurückgebenfunc read() (string, error) { return "", err }
Einen Fehler prüfenif err != nil { return err }
Einen Fehler erstellenerrors.New("not found")
Formatierter Fehlerfmt.Errorf("bad id %d", id)
Einen Fehler umhüllenfmt.Errorf("load: %w", err)
Auspacken / abgleichenerrors.Is(err, os.ErrNotExist)
Nach Typ abgleichenerrors.As(err, &target)
Panic / recoverdefer func() { recover() }()

Die Go-Syntax, die du am häufigsten brauchst, auf einer Seite. Dieser Go-Spickzettel ist eine Schnellreferenz für die Kernsprache - Variablen und Typen, Slices und Maps, Structs und Interfaces sowie die Goroutinen und Channels, mit denen Golang bei Nebenläufigkeit glänzt.

Alles hier ist Standard-Go und kompiliert mit der offiziellen Toolchain. Kopiere, was du brauchst, oder probiere jeden Codeschnipsel live im Go-Playground aus - keine Installation nötig.

Go-Spickzettel FAQ

Ist dieser Go-Spickzettel kostenlos?
Ja. Dieser Go-Spickzettel ist völlig kostenlos, ohne erforderliche Anmeldung. Setze ein Lesezeichen und komm jederzeit wieder, wenn du eine Slice-Operation, ein Channel-Muster oder eine Struct-Methode nachschlagen möchtest.
Was ist der Unterschied zwischen := und var in Go?
var x = 0 deklariert eine Variable und funktioniert überall, auch auf Package-Ebene. x := 0 ist die kurze Variablendeklaration: Sie deklariert und weist zugleich zu, leitet den Typ ab und kann nur innerhalb einer Funktion verwendet werden. Verwende var, wenn du einen expliziten Typ oder eine Variable auf Package-Ebene brauchst, und := für kompakte lokale Deklarationen.
Was sind Goroutinen und Channels?
Eine Goroutine ist ein leichtgewichtiger Thread, der von der Go-Laufzeit verwaltet wird - du startest eine, indem du go someFunc() schreibst. Channels sind typisierte Pipes, über die Goroutinen sicher kommunizieren: Eine Goroutine sendet mit ch <- v und eine andere empfängt mit <-ch. Zusammen bilden sie das zentrale Nebenläufigkeitsmodell von Go, festgehalten im Leitsatz „Teile Speicher durch Kommunikation".
Kann ich Go online üben?
Ja. Öffne den Go-Playground, um jeden Codeschnipsel aus diesem Spickzettel in deinem Browser auszuführen - keine Go-Toolchain zu installieren. Wenn du Struktur möchtest, führt dich Coddys kostenloser interaktiver Go-Kurs Schritt für Schritt von Variablen und Slices zu Goroutinen und Channels.
Ist dieser Spickzettel für Anfänger geeignet?
Ja. Er ist von den häufigsten Themen (Variablen, Kontrollfluss, Funktionen) hin zu den fortgeschrittenen (Goroutinen, Channels, Fehlerbehandlung) gegliedert, sodass du die oberen Abschnitte schon am ersten Tag nutzen und in den Rest hineinwachsen kannst.
Coddy programming languages illustration

Lerne Go mit Coddy

LOS GEHT'S