From e124226b07cb763e04782be0a207f5fb5c6c787c Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Thu, 6 Oct 2022 13:50:12 -0400 Subject: [PATCH] generics --- go/genericz/go.mod | 3 +++ go/genericz/main.go | 49 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 go/genericz/go.mod create mode 100644 go/genericz/main.go diff --git a/go/genericz/go.mod b/go/genericz/go.mod new file mode 100644 index 0000000..3e5b21f --- /dev/null +++ b/go/genericz/go.mod @@ -0,0 +1,3 @@ +module genericz + +go 1.19 diff --git a/go/genericz/main.go b/go/genericz/main.go new file mode 100644 index 0000000..d54eef7 --- /dev/null +++ b/go/genericz/main.go @@ -0,0 +1,49 @@ +package main + +import "fmt" + +func SumInts(m map[string]int64) int64 { + var s int64 + for _, v := range m { + s += v + } + return s +} + +func SumFloats(m map[string]float64) float64 { + var s float64 + for _, v := range m { + s += v + } + return s +} + +func SumMap[K comparable, V int64 | float64](m map[K]V) V { + var s V + for _, v := range m { + s += v + } + return s +} + +func main() { + // Initialize a map for the integer values + ints := map[string]int64{ + "first": 34, + "second": 12, + } + + // Initialize a map for the float values + floats := map[string]float64{ + "first": 35.98, + "second": 26.99, + } + + fmt.Printf("Non-Generic Sums: %v and %v\n", + SumInts(ints), + SumFloats(floats)) + + fmt.Printf("Generic Sums: %v and %v\n", + SumMap[string, int64](ints), + SumMap[string, float64](floats)) +}