Zum Inhalt springen
Serkan Köse
Akzent

Zero Values, explizite Typen und der Compiler

Kapitel 2

Themen: eingebaute Typen, Variablendeklarationen, Zero Values, Typkonvertierung, Konstanten, unbenutzte Variablen.

Zero Values

Jede deklarierte Variable in Go bekommt automatisch einen Zero-Wert, auch ohne explizite Zuweisung.

var x int
var s string
var flag bool
fmt.Println(x)    // 0
fmt.Println(s)    // "" (leerer String)
fmt.Println(flag) // false

Es gibt kein undefined, kein null. Der Default-Wert ist je nach Typ definiert.

Keine automatische Typkonvertierung

Go konvertiert numerische Typen nicht automatisch. Ein int und ein float64 lassen sich nur addieren, wenn explizit konvertiert wird.

var x int = 10
var y float64 = 30.2
var sum float64 = float64(x) + y

Kein Truthiness

Bedingungen müssen einen booleschen Wert ergeben. Ein leerer String oder 0 wird nicht implizit als false behandelt.

if s == "" {
    // String ist leer
}

if x == 0 {
    // Zahl ist Null
}

if s allein kompiliert nicht.

var gegen :=

Zwei Formen für Variablendeklarationen.

var x int = 10

und

x := 10

Bei := wird der Typ abgeleitet. Innerhalb von Funktionen ist das die übliche Form. var ist sinnvoll, wenn der Zero-Wert explizit genutzt wird:

var x int

oder wenn ein bestimmter Typ wichtig ist:

var x byte = 20

Lesbarer als x := byte(20).

Konstanten

Konstanten werden zur Compile-Zeit ausgewertet. Keine Funktionsaufrufe, keine Laufzeit-Berechnungen.

const x = 10        // ok
const y = 20 * 10   // ok
const z = len("hi") // ok (Built-in)

a := 5
const b = a + 1     // kompiliert nicht, a ist eine Variable

Es gibt keinen Mechanismus, einen zur Laufzeit berechneten Wert unveränderlich zu machen.

Unbenutzte Variablen

Eine lokale Variable, die deklariert, aber nie gelesen wird, ist ein Compile-Fehler.

func main() {
    x := 10  // compile error: x declared but not used
}

Zusammenfassung

  • Jede Variable hat einen Zero-Wert, kein undefined
  • Typkonvertierung ist immer explizit
  • Bedingungen brauchen echte Booleans
  • := innerhalb von Funktionen, var für Zero-Wert oder expliziten Typ
  • Konstanten nur zur Compile-Zeit
  • Unbenutzte lokale Variablen sind ein Compile-Fehler