From 26d961ea89ae93838ff6721ac32ae0e0100af158 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 07:02:25 +0000 Subject: [PATCH] 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) + } +}