Variablen

Computerprogramme werden interessant, wenn sie nicht nur Text ausgeben, sondern auch Daten verarbeiten können. Dazu werden Daten meist aus einer externen Quelle eingelesen (z.B. Datenbank oder Netzwerkverbindung), intern gespeichert, verarbeitet und ausgegeben. Zum Speichern von Inhalten werden sogenannte Variablen benutzt und Inhalte zu Namen zugeordnet.

package main

import "fmt"

func main() {
    var gruß string
    gruß = "Hallo Welt"
    fmt.Println(gruß)
}
Erweitertes »Hallo Welt«-Beispiel mit einer Variablen

In der Funktion main wird nun zuerst die Variable mit dem Namen gruß deklariert und dem Compiler mitgeteilt, dass unter diesem Namen nur Zeichenketten (strings) gespeichert werden dürfen. In der zweiten Zeile weisen wir den Wert »Hallo Welt« diesem Namen zu und geben sie in der dritten Zeile aus.

Hier kommt eine Eigenschaft von Go ins Spiel: Typsicherheit. Wenn wir dem Namen »gruß« etwas anderes zuweisen, als eine Zeichenkette, wird der Compiler eine Fehlermeldung ausgeben und das Programm nicht übersetzen. Bei folgendem Programmtext (Ausschnitt aus dem Programm von oben)

var gruß string
// Fehler!
gruß = 1234

beschwert sich Compiler und gibt diese Fehlermeldung aus:

./hallo.go: cannot use 1234 (type int) as type string in assignment

Das besagt, dass die Zahl 1234, die eine Ganzzahl (int) ist, nicht als Typ Zeichenkette in der Zuweisung benutzt werden kann. Den Fehler muss man beheben, bevor das Programm ausgeführt werden kann.

Go kennt keine Warnungen, nur Fehlermeldungen. Wird beispielsweise eine Variable deklariert, aber nicht benutzt, kompiliert Go das Programm nicht. Viele Anfänger fluchen über diese Eigenheit, denn es macht es schwieriger mal eben nach einer kleinen Änderung das Programm zu übersetzen und auszuprobieren. Sei aber sicher: nach kurzer Eingewöhnungszeit wirst du die Vorteile zu schätzen wissen.

Nun ist es aber umständlich erst einmal zu deklarieren, um welchen Typ es sich bei einer Zuweisung handelt, wenn der Typ eindeutig ist. D.h. wenn es klar ist, dass ich unter dem Namen gruß eine Zeichenkette speichern will, warum sollte ich das dann erst einmal dem Compiler (=Go) mitteilen? Und hier kommt einer der vielen wunderbaren Dinge ins Spiel, die Go so attraktiv machen im Vergleich zu vielen anderen Programmiersprachen. Obiges Programm würde man eher so schreiben:

package main

import "fmt"

func main() {
    gruß := "Hallo Welt"
    fmt.Println(gruß)
}
Vereinfachtes »Hallo Welt«-Beispiel mit einer Variablen

Die Kombination := ist eine sogenannte short variable declaration und ist die Kurzform für

var gruß = "Hallo Welt"

einer Variablendeklaration mit Initialisierer (einem konkreten Wert). Go kann aus dem Wert auf der rechten Seite der Variablen erkennen, welche Typen unter diesem Namen gespeichert werden dürfen. Damit erspart man sich die Angabe des Typs (string).

Da nun die grundlegenden Bausteine von Go beschrieben wurden, können wir uns den Details zuwenden. Den größeren Themen ist ein eigenes Kapitel gewidmet.