From 791303275280a4fd1cb34c4ae57533e075f4780b Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:35:18 +0000 Subject: [PATCH 01/24] values --- go/01-basics/00-values.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 go/01-basics/00-values.go diff --git a/go/01-basics/00-values.go b/go/01-basics/00-values.go new file mode 100644 index 0000000..2da0a0c --- /dev/null +++ b/go/01-basics/00-values.go @@ -0,0 +1,15 @@ +package main + +import "fmt" + +func main() { + + fmt.Println("go" + "lang") + + fmt.Println("1+1 =", 1+1) + fmt.Println("7.0/3.0 =", 7.0/3.0) + + fmt.Println(true && false) + fmt.Println(true || false) + fmt.Println(!true) +} From c7c856882fd5cbc85128ead2845d9ffb4fa4ab1b Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:35:24 +0000 Subject: [PATCH 02/24] variables --- go/01-basics/01-variables.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 go/01-basics/01-variables.go diff --git a/go/01-basics/01-variables.go b/go/01-basics/01-variables.go new file mode 100644 index 0000000..18d1535 --- /dev/null +++ b/go/01-basics/01-variables.go @@ -0,0 +1,21 @@ +package main + +import "fmt" + +func main() { + + var a = "initial" + fmt.Println(a) + + var b, c int = 1, 2 + fmt.Println(b, c) + + var d = true + fmt.Println(d) + + var e int + fmt.Println(e) + + f := "apple" + fmt.Println(f) +} From 0883a9da01caec02a6b152610c80496ece3b18ab Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:35:32 +0000 Subject: [PATCH 03/24] constants --- go/01-basics/02-constants.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 go/01-basics/02-constants.go diff --git a/go/01-basics/02-constants.go b/go/01-basics/02-constants.go new file mode 100644 index 0000000..c030546 --- /dev/null +++ b/go/01-basics/02-constants.go @@ -0,0 +1,21 @@ +package main + +import ( + "fmt" + "math" +) + +const s string = "constant" + +func main() { + fmt.Println(s) + + const n = 500000000 + + const d = 3e20 / n + fmt.Println(d) + + fmt.Println(int64(d)) + + fmt.Println(math.Sin(n)) +} \ No newline at end of file From 3dcfa6b2176ee7c99f1692b22d32b449a2dfefc0 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:35:42 +0000 Subject: [PATCH 04/24] for --- go/01-basics/03-for.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 go/01-basics/03-for.go diff --git a/go/01-basics/03-for.go b/go/01-basics/03-for.go new file mode 100644 index 0000000..912b6c3 --- /dev/null +++ b/go/01-basics/03-for.go @@ -0,0 +1,32 @@ +package main + +import "fmt" + +func main() { + + i := 1 + for i <= 3 { + fmt.Println(i) + i = i + 1 + } + + for j := 0; j < 3; j++ { + fmt.Println(j) + } + + for i := range 3 { + fmt.Println("range", i) + } + + for { + fmt.Println("loop") + break + } + + for n := range 6 { + if n%2 == 0 { + continue + } + fmt.Println(n) + } +} From 17198381b01abf3712b7f59d7844492a695002cf Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:35:50 +0000 Subject: [PATCH 05/24] ifelse --- go/01-basics/04-if-else.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 go/01-basics/04-if-else.go diff --git a/go/01-basics/04-if-else.go b/go/01-basics/04-if-else.go new file mode 100644 index 0000000..c4e8f89 --- /dev/null +++ b/go/01-basics/04-if-else.go @@ -0,0 +1,28 @@ +package main + +import "fmt" + +func main() { + + if 7%2 == 0 { + fmt.Println("7 is even") + } else { + fmt.Println("7 is odd") + } + + if 8%4 == 0 { + fmt.Println("8 is divisible by 4") + } + + if 8%2 == 0 || 7%2 == 0 { + fmt.Println("either 8 or 7 are even") + } + + if num := 9; num < 0 { + fmt.Println(num, "is negative") + } else if num < 10 { + fmt.Println(num, "has 1 digit") + } else { + fmt.Println(num, "has multiple digits") + } +} From 7704129817e32a249b70e72d4455378f3647a15a Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:35:55 +0000 Subject: [PATCH 06/24] switch --- go/01-basics/05-switch.go | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 go/01-basics/05-switch.go diff --git a/go/01-basics/05-switch.go b/go/01-basics/05-switch.go new file mode 100644 index 0000000..545f1a6 --- /dev/null +++ b/go/01-basics/05-switch.go @@ -0,0 +1,49 @@ +package main + +import ( + "fmt" + "time" +) + +func main() { + + i := 2 + fmt.Print("Write ", i, " as ") + switch i { + case 1: + fmt.Println("one") + case 2: + fmt.Println("two") + case 3: + fmt.Println("three") + } + + switch time.Now().Weekday() { + case time.Saturday, time.Sunday: + fmt.Println("It's the weekend") + default: + fmt.Println("It's a weekday") + } + + t := time.Now() + switch { + case t.Hour() < 12: + fmt.Println("It's before noon") + default: + fmt.Println("It's after noon") + } + + whatAmI := func(i interface{}) { + switch t := i.(type) { + case bool: + fmt.Println("I'm a bool") + case int: + fmt.Println("I'm an int") + default: + fmt.Printf("Don't know type %T\n", t) + } + } + whatAmI(true) + whatAmI(1) + whatAmI("hey") +} From 5aaff118b964db040dd411964b7a1d32e1132348 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:36:03 +0000 Subject: [PATCH 07/24] arrays --- go/01-basics/06-arrays.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 go/01-basics/06-arrays.go diff --git a/go/01-basics/06-arrays.go b/go/01-basics/06-arrays.go new file mode 100644 index 0000000..ab2ed71 --- /dev/null +++ b/go/01-basics/06-arrays.go @@ -0,0 +1,38 @@ +package main + +import "fmt" + +func main() { + + var a [5]int + fmt.Println("emp:", a) + + a[4] = 100 + fmt.Println("set:", a) + fmt.Println("get:", a[4]) + + fmt.Println("len:", len(a)) + + b := [5]int{1, 2, 3, 4, 5} + fmt.Println("dcl:", b) + + b = [...]int{1, 2, 3, 4, 5} + fmt.Println("dcl:", b) + + b = [...]int{100, 3: 400, 500} + fmt.Println("idx:", b) + + var twoD [2][3]int + for i := 0; i < 2; i++ { + for j := 0; j < 3; j++ { + twoD[i][j] = i + j + } + } + fmt.Println("2d: ", twoD) + + twoD = [2][3]int{ + {1, 2, 3}, + {1, 2, 3}, + } + fmt.Println("2d: ", twoD) +} \ No newline at end of file From 07bc76c3562b5d21832c4530845b165d36ca6351 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:36:09 +0000 Subject: [PATCH 08/24] pointers --- go/01-basics/07-pointers.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 go/01-basics/07-pointers.go diff --git a/go/01-basics/07-pointers.go b/go/01-basics/07-pointers.go new file mode 100644 index 0000000..e5f95f6 --- /dev/null +++ b/go/01-basics/07-pointers.go @@ -0,0 +1,24 @@ +package main + +import "fmt" + +func zeroval(ival int) { + ival = 0 +} + +func zeroptr(iptr *int) { + *iptr = 0 +} + +func main() { + i := 1 + fmt.Println("initial:", i) + + zeroval(i) + fmt.Println("zeroval:", i) + + zeroptr(&i) + fmt.Println("zeroptr:", i) + + fmt.Println("pointer:", &i) +} From 8b5657d026054f648acb2d3a018d867b3ab768f9 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:36:17 +0000 Subject: [PATCH 09/24] slices --- go/01-basics/08-slices.go | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 go/01-basics/08-slices.go diff --git a/go/01-basics/08-slices.go b/go/01-basics/08-slices.go new file mode 100644 index 0000000..8400528 --- /dev/null +++ b/go/01-basics/08-slices.go @@ -0,0 +1,58 @@ +package main + +import ( + "fmt" + "slices" +) + +func main() { + + var s []string + fmt.Println("uninit:", s, s == nil, len(s) == 0) + + s = make([]string, 3) + fmt.Println("emp:", s, "len:", len(s), "cap:", cap(s)) + + s[0] = "a" + s[1] = "b" + s[2] = "c" + fmt.Println("set:", s) + fmt.Println("get:", s[2]) + + fmt.Println("len:", len(s)) + + s = append(s, "d") + s = append(s, "e", "f") + fmt.Println("apd:", s) + + c := make([]string, len(s)) + copy(c, s) + fmt.Println("cpy:", c) + + l := s[2:5] + fmt.Println("sl1:", l) + + l = s[:5] + fmt.Println("sl2:", l) + + l = s[2:] + fmt.Println("sl3:", l) + + t := []string{"g", "h", "i"} + fmt.Println("dcl:", t) + + t2 := []string{"g", "h", "i"} + if slices.Equal(t, t2) { + fmt.Println("t == t2") + } + + twoD := make([][]int, 3) + for i := 0; i < 3; i++ { + innerLen := i + 1 + twoD[i] = make([]int, innerLen) + for j := 0; j < innerLen; j++ { + twoD[i][j] = i + j + } + } + fmt.Println("2d: ", twoD) +} From 5f2511d8949a1ee4f0ddd3a1a660c19ce0841444 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:36:20 +0000 Subject: [PATCH 10/24] maps --- go/01-basics/09-maps.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 go/01-basics/09-maps.go diff --git a/go/01-basics/09-maps.go b/go/01-basics/09-maps.go new file mode 100644 index 0000000..0a8eb73 --- /dev/null +++ b/go/01-basics/09-maps.go @@ -0,0 +1,41 @@ +package main + +import ( + "fmt" + "maps" +) + +func main() { + + m := make(map[string]int) + + m["k1"] = 7 + m["k2"] = 13 + + fmt.Println("map:", m) + + v1 := m["k1"] + fmt.Println("v1:", v1) + + v3 := m["k3"] + fmt.Println("v3:", v3) + + fmt.Println("len:", len(m)) + + delete(m, "k2") + fmt.Println("map:", m) + + clear(m) + fmt.Println("map:", m) + + _, prs := m["k2"] + fmt.Println("prs:", prs) + + n := map[string]int{"foo": 1, "bar": 2} + fmt.Println("map:", n) + + n2 := map[string]int{"foo": 1, "bar": 2} + if maps.Equal(n, n2) { + fmt.Println("n == n2") + } +} From a8633aa18f03377560b9d7654f1638228a198784 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:36:25 +0000 Subject: [PATCH 11/24] enums --- go/01-basics/10-enums.go | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 go/01-basics/10-enums.go diff --git a/go/01-basics/10-enums.go b/go/01-basics/10-enums.go new file mode 100644 index 0000000..feeb598 --- /dev/null +++ b/go/01-basics/10-enums.go @@ -0,0 +1,45 @@ +package main + +import "fmt" + +type ServerState int + +const ( + StateIdle ServerState = iota + StateConnected + StateError + StateRetrying +) + +var stateName = map[ServerState]string{ + StateIdle: "idle", + StateConnected: "connected", + StateError: "error", + StateRetrying: "retrying", +} + +func (ss ServerState) String() string { + return stateName[ss] +} + +func main() { + ns := transition(StateIdle) + fmt.Println(ns) + + ns2 := transition(ns) + fmt.Println(ns2) +} + +func transition(s ServerState) ServerState { + switch s { + case StateIdle: + return StateConnected + case StateConnected, StateRetrying: + + return StateIdle + case StateError: + return StateError + default: + panic(fmt.Errorf("unknown state: %s", s)) + } +} From 0c032e5c6369635d58fafd37b3b35421ff59de06 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:36:32 +0000 Subject: [PATCH 12/24] functions --- go/01-basics/11-functions.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 go/01-basics/11-functions.go diff --git a/go/01-basics/11-functions.go b/go/01-basics/11-functions.go new file mode 100644 index 0000000..4f51b2d --- /dev/null +++ b/go/01-basics/11-functions.go @@ -0,0 +1,36 @@ +package main + +import "fmt" + +func plus(a int, b int) int { + return a + b +} + +func plusPlus(a, b, c int) int { + return a + b + c +} + +func plusNamed(a, b int) (result int) { + result = a + b + return +} + +func plusDescription(a int, b int) (int, string) { + result := a + b + return result, fmt.Sprintf("%d+%d = %d", a, b, result) +} + +func main() { + + res := plus(1, 2) + fmt.Println("1+2 =", res) + + res = plusPlus(1, 2, 3) + fmt.Println("1+2+3 =", res) + + res = plusNamed(1, 2) + fmt.Println("1+2 =", res) + + _, desc := plusDescription(1, 2) + fmt.Println(desc) +} From 7160d21cdc5f101deed08206d76ca217103d1cf9 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:36:39 +0000 Subject: [PATCH 13/24] structs --- go/01-basics/12-structs.go | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 go/01-basics/12-structs.go diff --git a/go/01-basics/12-structs.go b/go/01-basics/12-structs.go new file mode 100644 index 0000000..4f9756f --- /dev/null +++ b/go/01-basics/12-structs.go @@ -0,0 +1,46 @@ +package main + +import "fmt" + +type person struct { + name string + age int +} + +func newPerson(name string) *person { + + p := person{name: name} + p.age = 42 + return &p +} + +func main() { + + fmt.Println(person{"Bob", 20}) + + fmt.Println(person{name: "Alice", age: 30}) + + fmt.Println(person{name: "Fred"}) + + fmt.Println(&person{name: "Ann", age: 40}) + + fmt.Println(newPerson("Jon")) + + s := person{name: "Sean", age: 50} + fmt.Println(s.name) + + sp := &s + fmt.Println(sp.age) + + sp.age = 51 + fmt.Println(sp.age) + + dog := struct { + name string + isGood bool + }{ + "Rex", + true, + } + fmt.Println(dog) +} From af379205928b31776542d3f6684d0271520ab6c8 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:49:34 +0000 Subject: [PATCH 14/24] cheat sheet --- go/go-cheat-sheet.pdf | Bin 0 -> 61248 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 go/go-cheat-sheet.pdf diff --git a/go/go-cheat-sheet.pdf b/go/go-cheat-sheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..709b20f4d13421dc04d2b245a94673beeac4f5e6 GIT binary patch literal 61248 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 c$L5_gaLY!bY%NMi2n2y|0HC*1VgLXD literal 0 HcmV?d00001 From 58d393bb931710f87948c39cd696565c4907eb7a Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 07:02:25 +0000 Subject: [PATCH 15/24] next level starting point --- go/02-next-level/05-generics.go | 51 +++++++++++++++++++++++++++++++++ go/02-next-level/06-defer.go | 35 ++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 go/02-next-level/05-generics.go create mode 100644 go/02-next-level/06-defer.go diff --git a/go/02-next-level/05-generics.go b/go/02-next-level/05-generics.go new file mode 100644 index 0000000..5481cb1 --- /dev/null +++ b/go/02-next-level/05-generics.go @@ -0,0 +1,51 @@ +package main + +import "fmt" + +func SlicesIndex[S []E, E int](s []string, v string) int { + for i := range s { + if v == s[i] { + return i + } + } + return -1 +} + +type List struct { + head, tail *element +} + +type element struct { + next *element + val int +} + +func (lst *List) Push(v int) { + if lst.tail == nil { + lst.head = &element{val: v} + lst.tail = lst.head + } else { + lst.tail.next = &element{val: v} + lst.tail = lst.tail.next + } +} + +func (lst *List) AllElements() []int { + var elems []int + for e := lst.head; e != nil; e = e.next { + elems = append(elems, e.val) + } + return elems +} + +func main() { + var s = []string{"foo", "bar", "zoo"} + + fmt.Println("index of zoo:", SlicesIndex(s, "zoo")) + + lst := List{} + lst.Push(10) + lst.Push(13) + lst.Push(23) + fmt.Println("list:", lst.AllElements()) +} diff --git a/go/02-next-level/06-defer.go b/go/02-next-level/06-defer.go new file mode 100644 index 0000000..998103c --- /dev/null +++ b/go/02-next-level/06-defer.go @@ -0,0 +1,35 @@ +package main + +import ( + "fmt" + "os" +) + +func main() { + f := createFile("/tmp/defer.txt") + writeFile(f) + closeFile(f) +} + +func createFile(p string) *os.File { + fmt.Println("creating") + f, err := os.Create(p) + if err != nil { + panic(err) + } + return f +} + +func writeFile(f *os.File) { + fmt.Println("writing") + fmt.Fprintln(f, "data") +} + +func closeFile(f *os.File) { + fmt.Println("closing") + err := f.Close() + + if err != nil { + panic(err) + } +} From 67d692c1b04298001b360a98a57dc910e52a182f Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 07:10:26 +0000 Subject: [PATCH 16/24] modules starting point --- go/03-modules/main.go | 5 +++++ go/03-modules/myMath/math.go | 0 2 files changed, 5 insertions(+) create mode 100644 go/03-modules/main.go create mode 100644 go/03-modules/myMath/math.go diff --git a/go/03-modules/main.go b/go/03-modules/main.go new file mode 100644 index 0000000..7905807 --- /dev/null +++ b/go/03-modules/main.go @@ -0,0 +1,5 @@ +package main + +func main() { + +} diff --git a/go/03-modules/myMath/math.go b/go/03-modules/myMath/math.go new file mode 100644 index 0000000..e69de29 From 340fe289c61223c5e40092759f5529d275e1f446 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 09:18:14 +0000 Subject: [PATCH 17/24] fix go mod tidy permission issues --- go/.devcontainer/Dockerfile | 17 ++++++++++++----- go/.devcontainer/devcontainer.json | 3 ++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/go/.devcontainer/Dockerfile b/go/.devcontainer/Dockerfile index 506077c..206f58f 100644 --- a/go/.devcontainer/Dockerfile +++ b/go/.devcontainer/Dockerfile @@ -1,14 +1,21 @@ FROM golang:1.25 RUN apt-get update && apt-get install -y build-essential -RUN go install github.com/go-delve/delve/cmd/dlv@latest -RUN go install -v github.com/cweill/gotests/gotests@v1.6.0 -RUN go install -v golang.org/x/tools/gopls@latest -RUN go install -v golang.org/x/tools/cmd/goimports@latest -RUN go install -v honnef.co/go/tools/cmd/staticcheck@latest + +#RUN go install github.com/go-delve/delve/cmd/dlv@latest +#RUN go install github.com/cweill/gotests/gotests@v1.6.0 +#RUN go install golang.org/x/tools/gopls@latest +#RUN go install golang.org/x/tools/cmd/goimports@latest +#RUN go install honnef.co/go/tools/cmd/staticcheck@latest + +# allow all users to add go packages in that container +#RUN mkdir -p /go/pkg && chmod -R a+rwx /go/pkg +#RUN chmod -R a+rwx /go/pkg/mod /go/pkg/sumdb +#RUN chmod -R a+rwx /go/pkg/mod/github.com ARG USERNAME=developer ARG USER_UID=1000 ARG USER_GID=$USER_UID RUN groupadd --gid $USER_GID $USERNAME && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME USER $USERNAME + diff --git a/go/.devcontainer/devcontainer.json b/go/.devcontainer/devcontainer.json index 6dae661..3f36777 100644 --- a/go/.devcontainer/devcontainer.json +++ b/go/.devcontainer/devcontainer.json @@ -3,7 +3,8 @@ "build": { "dockerfile": "Dockerfile" }, - "customizations": { + "postCreateCommand": "go install github.com/go-delve/delve/cmd/dlv@latest && go install github.com/cweill/gotests/gotests@v1.6.0 && go install golang.org/x/tools/gopls@latest && go install golang.org/x/tools/cmd/goimports@latest && go install honnef.co/go/tools/cmd/staticcheck@latest", + "customizations": { "vscode": { "extensions": [ "golang.go", "gruntfuggly.todo-tree" From 4632c0c479aa06a8f6e26c8dd36d69eca92db694 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 11:22:18 +0000 Subject: [PATCH 18/24] design pattern assignment --- go/04-design-pattern/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 go/04-design-pattern/README.md diff --git a/go/04-design-pattern/README.md b/go/04-design-pattern/README.md new file mode 100644 index 0000000..850d97c --- /dev/null +++ b/go/04-design-pattern/README.md @@ -0,0 +1,9 @@ +# Assignment + +Implement an arbitrary [design pattern](https://refactoring.guru/design-patterns/catalog) in Go. + +1. Create a package named `patterns` in the `04-design-patterns` folder +2. Implement the design pattern in that package +3. Implement a corresponding unit test +4. Create an example application that uses the design pattern in the file `04-design-patterns/main.go` +5. Zip the source code and upload From 2d1eec66ea459fc6ad77b8e170caf59fc1f5bfa7 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 11:33:21 +0000 Subject: [PATCH 19/24] concurrency --- go/05-concurrency/deadlock.go | 17 +++++++ go/05-concurrency/mergeSort.go | 86 ++++++++++++++++++++++++++++++++++ go/05-concurrency/select.go | 19 ++++++++ 3 files changed, 122 insertions(+) create mode 100644 go/05-concurrency/deadlock.go create mode 100644 go/05-concurrency/mergeSort.go create mode 100644 go/05-concurrency/select.go diff --git a/go/05-concurrency/deadlock.go b/go/05-concurrency/deadlock.go new file mode 100644 index 0000000..931c201 --- /dev/null +++ b/go/05-concurrency/deadlock.go @@ -0,0 +1,17 @@ +package main + +func print(ci <-chan int) { + //TODO: implement +} + +func main() { + + c := make(chan int) + + c <- 1 + c <- 2 + c <- 3 + close(c) + + print(c) +} diff --git a/go/05-concurrency/mergeSort.go b/go/05-concurrency/mergeSort.go new file mode 100644 index 0000000..4160246 --- /dev/null +++ b/go/05-concurrency/mergeSort.go @@ -0,0 +1,86 @@ +package main + +import ( + "fmt" + "math/rand" + "sort" + "time" +) + +func mergeSortSequential(data []float64) { + if len(data) <= 1 { + return + } + + mid := len(data) / 2 + left := data[:mid] + right := data[mid:] + + mergeSortSequential(left) + mergeSortSequential(right) + + copy(data, merge(left, right)) +} + +func merge(left, right []float64) []float64 { + result := make([]float64, 0, len(left)+len(right)) + i, j := 0, 0 + + for i < len(left) && j < len(right) { + if left[i] < right[j] { + result = append(result, left[i]) + i++ + } else { + result = append(result, right[j]) + j++ + } + } + + result = append(result, left[i:]...) + result = append(result, right[j:]...) + + return result +} + +func main() { + + //1. DATA CREATION + data := make([]float64, 1000*1000*20) + + for i := range data { + data[i] = rand.Float64() * 100 // Random floats between 0 and 100 + } + + expected := make([]float64, len(data)) + copy(expected, data) + sort.Float64s(expected) + + //2. SORTING + start := time.Now() + + mergeSortSequential(data) + + elapsed := time.Since(start) + fmt.Printf("MergeSort took %s\n", elapsed) + + //3. VERIFICATION + if sort.Float64sAreSorted(data) { + fmt.Println("Data is sorted correctly") + } else { + fmt.Println("Data is NOT sorted correctly") + } + + if len(data) != len(expected) { + fmt.Println("Data and expected slices have different lengths") + return + } + + for i := range data { + if data[i] != expected[i] { + fmt.Println("Data and expected slices do not match") + return + } + } + + fmt.Println("Data and expected slices match") +} diff --git a/go/05-concurrency/select.go b/go/05-concurrency/select.go new file mode 100644 index 0000000..8af6e52 --- /dev/null +++ b/go/05-concurrency/select.go @@ -0,0 +1,19 @@ +package main + +import ( + "math/rand" + "time" +) + +func main() { + + ch1 := make(chan string) + + go func() { + time.Sleep(time.Duration(rand.Intn(5)+1) * time.Second) + ch1 <- "Message from channel 1" + }() + + msg1 := <-ch1 + println("Received:", msg1) +} From df286acb4694232cdbf8b0fca3c5e8a312c4237f Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 15:46:12 +0200 Subject: [PATCH 20/24] cleanup dockerfile --- go/.devcontainer/Dockerfile | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/go/.devcontainer/Dockerfile b/go/.devcontainer/Dockerfile index 206f58f..a1ca4b5 100644 --- a/go/.devcontainer/Dockerfile +++ b/go/.devcontainer/Dockerfile @@ -2,20 +2,8 @@ FROM golang:1.25 RUN apt-get update && apt-get install -y build-essential -#RUN go install github.com/go-delve/delve/cmd/dlv@latest -#RUN go install github.com/cweill/gotests/gotests@v1.6.0 -#RUN go install golang.org/x/tools/gopls@latest -#RUN go install golang.org/x/tools/cmd/goimports@latest -#RUN go install honnef.co/go/tools/cmd/staticcheck@latest - -# allow all users to add go packages in that container -#RUN mkdir -p /go/pkg && chmod -R a+rwx /go/pkg -#RUN chmod -R a+rwx /go/pkg/mod /go/pkg/sumdb -#RUN chmod -R a+rwx /go/pkg/mod/github.com - ARG USERNAME=developer ARG USER_UID=1000 ARG USER_GID=$USER_UID RUN groupadd --gid $USER_GID $USERNAME && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME USER $USERNAME - From 32f4ad3383ac1889544626da76bad50e9d05ff4d Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Fri, 3 Oct 2025 10:09:49 +0200 Subject: [PATCH 21/24] added go.mod --- go/00-hello-world/go.mod | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 go/00-hello-world/go.mod diff --git a/go/00-hello-world/go.mod b/go/00-hello-world/go.mod new file mode 100644 index 0000000..42919e7 --- /dev/null +++ b/go/00-hello-world/go.mod @@ -0,0 +1,3 @@ +module gitty.informatik.hs-mannheim.de/steger/pr3-ws202526/go/00-hello-world/hello-world + +go 1.25.0 From 05b5b271554047522b81ca127e78dcd4ca4cacb8 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Fri, 3 Oct 2025 10:15:45 +0200 Subject: [PATCH 22/24] added go.mod in hello world --- go/00-hello-world/go.mod | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 go/00-hello-world/go.mod diff --git a/go/00-hello-world/go.mod b/go/00-hello-world/go.mod new file mode 100644 index 0000000..42919e7 --- /dev/null +++ b/go/00-hello-world/go.mod @@ -0,0 +1,3 @@ +module gitty.informatik.hs-mannheim.de/steger/pr3-ws202526/go/00-hello-world/hello-world + +go 1.25.0 From 43d34225cd0ab66dde9c64ce4632e4634a7c3fe6 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Mon, 13 Oct 2025 12:43:10 +0200 Subject: [PATCH 23/24] next level - part 1 --- go/02-next-level/00-methods.go | 26 ++++++++++++ go/02-next-level/01-interfaces.go | 66 +++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 go/02-next-level/00-methods.go create mode 100644 go/02-next-level/01-interfaces.go diff --git a/go/02-next-level/00-methods.go b/go/02-next-level/00-methods.go new file mode 100644 index 0000000..ae1a6ac --- /dev/null +++ b/go/02-next-level/00-methods.go @@ -0,0 +1,26 @@ +package main + +import "fmt" + +type Counter struct { + value int +} + +// pointer receiver. The method operates directly on the object c points to +// Use a pointer receiver whenever the object needs to be modified. +func (c *Counter) Increment() { + c.value++ +} + +// value receiver. The method operates on copy of object c. Use a value +// receiver when the object does not need to be modified in the method. +func (c Counter) String() string { + return fmt.Sprintf("Counter value: %d", c.value) +} + +func main() { + c := Counter{} + fmt.Println(c) + c.Increment() + fmt.Println(c) +} diff --git a/go/02-next-level/01-interfaces.go b/go/02-next-level/01-interfaces.go new file mode 100644 index 0000000..c0eb97f --- /dev/null +++ b/go/02-next-level/01-interfaces.go @@ -0,0 +1,66 @@ +package main + +import ( + "fmt" + "math" +) + +type geometry interface { + area() float64 + perim() float64 +} + +type rect struct { + width, height float64 +} + +// Ensure that rect implements the geometry interface +var _ geometry = rect{} + +type circle struct { + radius float64 +} + +// Ensure that circle implements the geometry interface +var _ geometry = circle{} + +func (r rect) area() float64 { + return r.width * r.height +} +func (r rect) perim() float64 { + return 2*r.width + 2*r.height +} + +func (c circle) area() float64 { + return math.Pi * c.radius * c.radius +} +func (c circle) perim() float64 { + return 2 * math.Pi * c.radius +} + +//Metods demonstrates how to use an interface +func measure(g geometry) { + fmt.Println(g) + fmt.Println(g.area()) + fmt.Println(g.perim()) +} + + +//Method demonstrates casting an interface to a concrete type. +//Should be avoided in practice whenever possible. +func detectCircle(g geometry) { + if c, ok := g.(circle); ok { + fmt.Println("circle with radius", c.radius) + } +} + +func main() { + r := rect{width: 3, height: 4} + c := circle{radius: 5} + + measure(r) + measure(c) + + detectCircle(r) + detectCircle(c) +} From f5c7049e72a00531a29ec3cec9fbcd7e42678db6 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Mon, 13 Oct 2025 12:45:32 +0200 Subject: [PATCH 24/24] solution calculator --- go/01-basics/calculator.go | 48 ++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/go/01-basics/calculator.go b/go/01-basics/calculator.go index 7686df8..19af19d 100644 --- a/go/01-basics/calculator.go +++ b/go/01-basics/calculator.go @@ -5,18 +5,46 @@ import ( ) func main() { + const ( + add = "add" + subtract = "subtract" + multiply = "multiply" + divide = "divide" + exit = "exit" + ) - //TODO: implement according to README.md + fmt.Println("Welcome to the Simple Calculator!") + for { + var operation string + fmt.Print("\nEnter operation (add, subtract, multiply, divide, exit): ") + fmt.Scan(&operation) - //the following code just demonstrates how to use fmt.Scan + if operation == exit { + fmt.Println("Goodbye!") + break + } - var str string - fmt.Print("Please enter a string: ") - fmt.Scan(&str) + var num1, num2 float64 + fmt.Print("Enter the first number: ") + fmt.Scan(&num1) + fmt.Print("Enter the second number: ") + fmt.Scan(&num2) - var x float64 - fmt.Print("Please enter a float: ") - fmt.Scan(&x) - - fmt.Printf("You entered '%s' and %f\n", str, x) + switch operation { + case add: + fmt.Printf("Result: %.2f\n", num1+num2) + case subtract: + fmt.Printf("Result: %.2f\n", num1-num2) + case multiply: + fmt.Printf("Result: %.2f\n", num1*num2) + case divide: + if num2 == 0 { + fmt.Println("Error: Division by zero is not allowed!") + } else { + fmt.Printf("Result: %.2f\n", num1/num2) + } + default: + fmt.Println("Invalid operation. Please try again.") + } + } }