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!")
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 Kapitel 1
aus:
$ go build
Wenn Sie nun in das Verzeichnis Kapitel 1
schauen, befindet sich dort eine neue Datei namens Kapitel_1
( Kapitel_1.exe
unter Windows).
Um diese Datei unter macOS auszuführen, geben Sie Folgendes im Terminal ein:
$ ./Kapitel_1
Unter Windows verwenden Sie folgenden Befehl:
C:\users\IhrName\Kapitel 1>Kapitel_1
Sie sollten nun eine Ausgabe ähnlich der folgenden sehen:
Hallo Welt!
2020-10-01 12:01:13.412568 +0800 +08 m=+0.000365532
Kompilieren von Programmen für mehrere Betriebssysteme
Bei der Installation von Go werden automatisch mehrere Go-Umgebungsvariablen eingerichtet, damit Ihre Go-Programme korrekt funktionieren. Insbesondere erkennt das Installationsprogramm bestimmte Werte der Host-Architektur und des genutzten Betriebssystems, die für die Umgebungsvariablen GOHOSTARCH
beziehungsweise GOHOSTOS
nötig sind. Die Werte dieser zwei Variablen geben die Zielplattform an, für die Ihre Programme kompiliert werden.
Wenn Sie sich diese Werte der Go-Umgebungsvariablen anzeigen lassen möchten, nutzen Sie den Befehl env
:
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/weimenglee/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
…
…
PKG_CONFIG="pkg-config"
Um Ihr Programm für ein anderes Betriebssystem zu kompilieren, müssen Sie zwei weitere Umgebungsvariablen anpassen: GOOS
und GOARCH
. Diese beiden Variablen konfigurieren das Ziel-Betriebssystem anhand der in Tabelle 1.1 gezeigten Werte.
Betriebssystem |
GOOS |
GOARCH |
macOS |
darwin |
amd64 |
Linux |
linux |
amd64 |
Windows |
windows |
amd64 |
Tabelle 1.1:Umgebungsvariablen für verschiedene Betriebssysteme
Um ein Programm für macOS zu kompilieren, nutzen Sie die folgenden Befehle und Optionen:
$ GOOS=darwin GOARCH=amd64 go build -o Kapitel_1-mac
Wenn Go in naher Zukunft nativ auf Apple Silicon portiert wird, wäre der Wert von GOARCH
entsprechend arm64
.
Um ein Programm für Windows OS zu kompilieren, sind folgende Befehle und Optionen nötig:
$ cd ~/"Kapitel 1"
$ GOOS=windows GOARCH=amd64 go build -o Kapitel_1-windows.exe
Über die Option -o
(kurz für Output ) können Sie einen Namen für die ausführbare Datei angeben.
Der vorgenannte Befehl kompiliert das Paket im Verzeichnis Kapitel 1
für Windows und speichert die ausführbare Datei als Kapitel_1-windows.exe
.
Um ein Programm für Linux zu kompilieren, nutzen Sie folgende Befehle und Optionen:
$ GOOS=linux GOARCH=amd64 go build -o Kapitel_1-linux
Falls Sie mit Go auf dem Raspberry Pi arbeiten, nutzen Sie für GOARCH
den Wert arm64
.
Читать дальше