Go programmieren für Dummies. Wei-Meng Lee
Nachdem Sie ein Programm gespeichert haben, müssen Sie es kompilieren. Erst dann kann es ausgeführt werden.
Um Ihr Programm direkt in Visual Studio Code auszuführen, klicken Sie in der Menüleiste auf TERMINAL | NEUES TERMINAL. Es öffnet sich ein Kommandozeilenfenster im unteren Bereich von Visual Studio Code (siehe Abbildung 1.8).
Abbildung 1.8: Die Kommandozeile kann direkt in Visual Studio Code aufgerufen werden.
Wechseln Sie nun zum Verzeichnis Kapitel 1
. Unter macOS geben Sie dazu folgenden Befehl ein:
$ cd ~/"Kapitel 1"
Und unter Windows geben Sie diesen Befehl ein:
$ cd "C:\users\IhrName\Kapitel 1"
Jetzt können Sie die Datei main.go
mit folgendem Befehl kompilieren:
$ go build main.go
Beim Kompilieren wird aus dem Programmcode der Datei main.go
eine ausführbare Datei erzeugt und automatisch im Ordner Kapitel 1
gespeichert. Um diese Datei namens main
unter macOS auszuführen, geben Sie folgenden Befehl ein:
$ ./main
Hallo Welt!
Wird die Zeichenkette Hallo Welt!
ausgegeben? Dann herzlichen Glückwunsch! Sie haben erfolgreich Ihr erstes Programm mit Go geschrieben.
Unter Windows erzeugt der build
-Befehl aus Ihrem Code eine ausführbare Anwendung namens main.exe
. Um sie auszuführen, geben Sie folgenden Befehl ein:
C:\users\IhrName\Kapitel 1>main.exe
Hallo Welt!
Da man den geschriebenen Programmcode oft direkt nach dem Kompilieren testen möchte, gibt es den Befehl run
, mit dem Sie das Kompilieren und Ausführen in einem Rutsch erledigen:
$ go run main.go
Funktionsweise eines Go-Programms
Ihr erstes Go-Programm hat hoffentlich funktioniert. Aber wie eigentlich? Schauen wir uns den Code einmal Zeile für Zeile an. Die erste Zeile legt den Namen des Pakets (package
) für dieses Programm fest:
package main
Go-Programme werden in Paketen organisiert. Ein Paket ist eine Sammlung aus Quelldateien, die sich alle im selben Verzeichnis befinden. In diesem Beispiel verweist main
auf das Paket, das Sie im Verzeichnis Kapitel 1
gespeichert haben. Wenn Sie weitere Quelldateien (.go
-Dateien) hinzufügen, werden sie alle diesem main
-Paket zugeordnet (mehr dazu in späteren Kapiteln).
Pakete müssen nicht zwingend den Namen
main
erhalten. Bei der Namenswahl sind Ihnen fast keine Grenzen gesetzt. Allerdings hat der Paketname main
eine besondere Bedeutung: Alle Pakete mit diesem Namen enthalten eine Funktion namens main()
, die als Einstiegspunkt für Ihr Programm dient. Auch der Dateiname muss nicht unbedingt mit dem Namen des enthaltenen Pakets übereinstimmen. Ich hätte meine Datei statt main.go
auch hund.go
nennen können – das Programm hätte trotzdem funktioniert (nur mit dem Unterschied, dass auch die ausführbare Anwendung automatisch den Namen hund
statt main
erhalten hätte).
Die nächste Codezeile importiert ein Paket namens fmt
:
import "fmt"
Dieses Paket umfasst diverse Funktionen, mit denen Sie Ausgaben formatieren und an die Konsole senden können, sowie Funktionen zum Erfassen von Benutzereingaben.
Falls Ihnen einige Begriffe aus dem Programmierjargon noch nicht geläufig sind: Eine Funktion ist ein Block aus Codezeilen, die eine bestimmte Aufgabe erfüllen. Weitere Details zu Go-Funktionen bietet Kapitel 5.
Der nächste Codeblock stellt den Einstiegspunkt Ihres Programms dar:
func main() {
}
Da der Paketname main
lautet, wird Ihr Programm bei der Ausführung zuerst diese main()
-Funktion durchlaufen.
Die letzte Zeile Ihres Programmcodes ruft die Println()
-Funktion aus dem Paket fmt
auf, um die Zeichenkette Hallo Welt!
in der Konsole auszugeben:
fmt.Println("Hallo Welt!")
Go-Dateistrukturen
Sie wissen nun, wie ein einfaches Go-Programm funktioniert. Aber wie werden die einzelnen Go-Dateien gruppiert und organisiert? Wie im vorigen Abschnitt erwähnt, gehören alle Dateien innerhalb desselben Verzeichnisses auch zum selben Paket. Zur Veranschaulichung fügen wir deshalb jetzt dem Verzeichnis Kapitel 1
eine neue Datei hinzu, der wir den Namen show_time.go
geben. (Wie Sie eine neue Datei erstellen und speichern, wurde im Abschnitt Ihr erstes Go-Programm erklärt.) Im Verzeichnis Kapitel 1
befinden sich nun also folgende Dateien:
Kapitel 1
|__main.go
|__show_time.go
Tragen Sie folgende Codezeilen in die Datei show_time.go
ein:
package main
import (
"fmt"
"time"
)
func displayTime() {
fmt.Println(time.Now())
}
Wie Sie anhand der ersten Zeile sehen, gehört diese Datei zum Paket main
. Wenn Sie mehr als ein Paket importieren möchten, müssen die Paketnamen von Klammern umschlossen sein. In diesem Beispiel werden die Pakete time
und fmt
importiert. Danach folgt eine Funktion namens displayTime()
, die mithilfe der Funktion Now()
des time
-Pakets die aktuelle Uhrzeit inklusive Datum ausgibt.
Da die displayTime()
-Funktion zum main
-Paket gehört, kann sie auch in main.go
aufgerufen werden:
package main
import "fmt"
func main() {
fmt.Println("Hallo Welt!")
displayTime()
}
Funktionen, die im selben Paket definiert sind, können aufgerufen werden, ohne dass Sie das Paket explizit importieren müssen.
Da nun zwei Dateien zum Paket main
gehören, müssen Sie beim Kompilieren keinen Dateinamen mehr angeben. Stattdessen führen Sie den Befehl build
innerhalb des Verzeichnisses