Dein erstes Go-Programm
Schreibe und verstehe dein erstes Go-Programm: Packages, Imports, die main-Funktion und die Standardausgabe mit fmt.
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 Zeilenumbruchfmt.Println- mit Zeilenumbruchfmt.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:
| Verb | Bedeutung |
|---|---|
%s | String |
%d | Ganzzahl (dezimal) |
%f | Fliesskomma (%.2f = 2 Stellen) |
%v | Standarddarstellung |
%+v | Struct mit Feldnamen |
%T | Typ des Werts |
%t | Boolean (true/false) |
%q | String 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.Scanlnliest eine Zeile von der Standard-Eingabe&nameuebergibt die Adresse vonname- damit kannScanlnden 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.Argsist ein Slice der Kommandozeilenargumenteos.Exit(1)beendet mit Fehler-Code 1os.Stderrist 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 ... mainist der Einstiegspunkt ausfuehrbarer Programmefmt.Println/fmt.Printfsind deine Ausgabe-Helfer- Unbenutzte Imports sind ein Kompilierfehler - gut so
- Exit-Codes ueber
os.Exit, Args ueberos.Args
Im naechsten Kapitel: Variablen und Datentypen.