Zum Inhalt springen
Go Anfรคnger 20 min

Dein erstes Go-Programm

Schreibe und verstehe dein erstes Go-Programm: Packages, Imports, die main-Funktion und die Standardausgabe mit fmt.

Aktualisiert:
Inhaltsverzeichnis

Dein erstes Go-Programm

Wir zerlegen das โ€œHallo Weltโ€ aus dem vorherigen Kapitel jetzt Zeile fuer Zeile - und erweitern es ein wenig.

Der Aufbau einer Go-Datei

package main

import "fmt"

func main() {
    fmt.Println("Hallo, Go!")
}

package main

Jede Go-Datei gehoert zu einem Package. Das spezielle Package main signalisiert: โ€œDas hier ist ein ausfuehrbares Programm.โ€ Andere Packages sind wiederverwendbare Bibliotheken.

import "fmt"

fmt kommt aus der Standardbibliothek und enthaelt Funktionen fuer formatierte Ein- und Ausgabe. Mehrere Imports werden gebuendelt:

import (
    "fmt"
    "os"
    "strings"
)

Wichtig: Go wirft einen Fehler, wenn du ein importiertes Paket nicht nutzt. Das haelt deinen Code aufgeraeumt.

func main()

Wie in vielen Sprachen ist main der Startpunkt. Keine Parameter, kein Rueckgabewert.

Wichtig: Die { muss in Go auf derselben Zeile stehen wie func. Der automatische Semikolon-Einfueger ist sonst ueberfordert. Das ist nicht verhandelbar - go fmt bringt Code ohnehin in die richtige Form.

fmt.Println

Gibt den Wert plus einen Zeilenumbruch aus. Verwandte Funktionen:

  • fmt.Print - ohne Zeilenumbruch
  • fmt.Println - mit Zeilenumbruch
  • fmt.Printf - formatiert, wie in C

Printf und Format-Verben

package main

import "fmt"

func main() {
    name := "Anna"
    alter := 28
    pi := 3.14159

    fmt.Printf("Name: %s\n", name)
    fmt.Printf("Alter: %d\n", alter)
    fmt.Printf("Pi: %.2f\n", pi)
    fmt.Printf("Alles: %s ist %d Jahre alt\n", name, alter)
}

Die wichtigsten Verben:

VerbBedeutung
%sString
%dGanzzahl (dezimal)
%fFliesskomma (%.2f = 2 Stellen)
%vStandarddarstellung
%+vStruct mit Feldnamen
%TTyp des Werts
%tBoolean (true/false)
%qString in Anfuehrungszeichen

Nutzerfreundliche Ausgabe

Erweitere dein Programm:

package main

import "fmt"

func main() {
    fmt.Print("Wie heisst du? ")
    var name string
    fmt.Scanln(&name)
    fmt.Printf("Hallo, %s!\n", name)
}
  • fmt.Scanln liest eine Zeile von der Standard-Eingabe
  • &name uebergibt die Adresse von name - damit kann Scanln den Wert dort hineinschreiben

Ein kleines Programm

Nutze mehrere Funktionen und Packages:

package main

import (
    "fmt"
    "strings"
)

func main() {
    satz := "Programmieren macht Spass"

    gross := strings.ToUpper(satz)
    kurz  := strings.ReplaceAll(satz, "Programmieren", "Coden")
    woerter := strings.Split(satz, " ")

    fmt.Println("Original:", satz)
    fmt.Println("Gross:   ", gross)
    fmt.Println("Kurz:    ", kurz)
    fmt.Printf("Woerter: %v (%d Stueck)\n", woerter, len(woerter))
}

strings ist eines der wichtigsten Pakete der Standardbibliothek - schau dir das gerne mal an.

Exit-Codes

Falls dein Programm einen Fehler melden soll:

package main

import (
    "fmt"
    "os"
)

func main() {
    if len(os.Args) < 2 {
        fmt.Fprintln(os.Stderr, "Bitte einen Namen uebergeben")
        os.Exit(1)
    }
    fmt.Printf("Hallo, %s!\n", os.Args[1])
}
  • os.Args ist ein Slice der Kommandozeilenargumente
  • os.Exit(1) beendet mit Fehler-Code 1
  • os.Stderr ist der Standard-Fehlerkanal

Eigene Funktionen

Du kannst natuerlich eigene Funktionen definieren:

package main

import "fmt"

func gruesse(name string) string {
    return "Hallo, " + name + "!"
}

func main() {
    fmt.Println(gruesse("Go"))
}

Mehr zu Funktionen in einem spaeteren Kapitel.

Zusammenfassung

  • Jede Go-Datei beginnt mit package ...
  • main ist der Einstiegspunkt ausfuehrbarer Programme
  • fmt.Println / fmt.Printf sind deine Ausgabe-Helfer
  • Unbenutzte Imports sind ein Kompilierfehler - gut so
  • Exit-Codes ueber os.Exit, Args ueber os.Args

Im naechsten Kapitel: Variablen und Datentypen.

Zurรผck zum Go Kurs