package main import ( "fmt" "math" ) const h string = "constant" // zeroval bekommt eine KOPIE: Änderung wirkt nur lokal. func zeroval(ival int) { ival = 0 } // zeroptr bekommt die ADRESSE: Änderung wirkt auf das Original. func zeroptr(iptr *int) { *iptr = 0 } func basics() { fmt.Println("go", "lang") fmt.Println("go" + "lang") fmt.Println(7 / 3) // 2 (Ganzzahldivision) fmt.Println(true || false) fmt.Println(!true) } func variables() { var a = "Initial" // Typ wird inferiert fmt.Println(a) a = "string" fmt.Println(a) var b int // Nullwert: 0 var c = 4 var x, y, z int = 1, 3, 6 fmt.Println(b, c) fmt.Println(x, y, z) s, z := "string", 8 // s neu, z nur neu zugewiesen fmt.Println(s, z) svar := h fmt.Println(svar) } func constants() { const n = 500000 const q = 3e20 / n // untypisiert, wird zur Compile-Zeit berechnet fmt.Println(q) // 6e+14 i := int64(n) fmt.Println(math.Sin(float64(i))) fmt.Println(math.Sin(n)) // untypisierte Konstante passt sich an } func controlFlow() { // Schleife mit Abbruchbedingung count := 0 for { fmt.Println("hello") count++ if count >= 3 { break } } j := 2 switch j { case 1: fmt.Println("one") case 2, 3: fmt.Println("two or three") default: fmt.Println("other") } } func arrays() { var u [5]int u[2] = 4 v := [...]int{1, 3, 4, 5, 6, 3} // Länge wird vom Compiler gezählt fmt.Println(u, v, len(v)) } func pointers() { t := 1 zeroval(t) fmt.Println(t) // 1, unverändert zeroptr(&t) fmt.Println(t) // 0, verändert j := 2 p := &j fmt.Println(*p) // 2 (Dereferenzierung) } func slices() { a := []int{} a = append(a, 5, 6, 6, 9, 7, 8) a = append(a, 6) a = append(a, 7) a[3] = 99 a = append(a, 8) b := a a = append(a, 9) fmt.Println(a, len(a)) fmt.Println(b) } func main() { basics() variables() constants() controlFlow() arrays() pointers() slices() }