1
0
Fork 0
pr3-ws202627/go/01-basics/basics.go

119 lines
1.9 KiB
Go

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()
}