diff --git a/14-concurrency/concurrency/go.mod b/14-concurrency/concurrency/go.mod new file mode 100644 index 0000000..de15108 --- /dev/null +++ b/14-concurrency/concurrency/go.mod @@ -0,0 +1,3 @@ +module concurrency + +go 1.22 diff --git a/14-concurrency/concurrency/main.go b/14-concurrency/concurrency/main.go new file mode 100644 index 0000000..4e64aab --- /dev/null +++ b/14-concurrency/concurrency/main.go @@ -0,0 +1,9 @@ +package main + +import "fmt" + +func main() { + fmt.Println("main function started") + CalcStoreTotal(Products) + fmt.Println("main function complete") +} diff --git a/14-concurrency/concurrency/operations.go b/14-concurrency/concurrency/operations.go new file mode 100644 index 0000000..5a902c2 --- /dev/null +++ b/14-concurrency/concurrency/operations.go @@ -0,0 +1,19 @@ +package main + +import "fmt" + +func CalcStoreTotal(data ProductData) { + var storeTotal float64 + for category, group := range data { + storeTotal += group.TotalPrice(category) + } + fmt.Println("Total: ", ToCurrency(storeTotal)) +} + +func (group ProductGroup) TotalPrice(category string) (total float64) { + for _, p := range group { + total += p.Price + } + fmt.Println(category, "subtotal: ", ToCurrency(total)) + return +} diff --git a/14-concurrency/concurrency/product.go b/14-concurrency/concurrency/product.go new file mode 100644 index 0000000..29cf843 --- /dev/null +++ b/14-concurrency/concurrency/product.go @@ -0,0 +1,39 @@ +package main + +import "strconv" + +type Product struct { + Name, category string + Price float64 +} + +type ProductGroup []*Product + +var ProductList = []*Product{ + {"Kayak", "Watersports", 279}, + {"LifeJacket", "Watersports", 49.95}, + {"Soccer Ball", "Soccer", 19.50}, + {"Corner Flags", "Soccer", 34.95}, + {"Stadium", "Soccer", 79500}, + {"Thinking Cap", "Chess", 16}, + {"Unsteady Chair", "Chess", 29.95}, + {"Bling-Bling King", "Chess", 1200}, +} + +type ProductData = map[string]ProductGroup + +var Products = make(ProductData) + +func ToCurrency(price float64) string { + return "$" + strconv.FormatFloat(price, 'f', 2, 64) +} + +func init() { + for _, product := range ProductList { + if _, ok := Products[product.category]; ok { + Products[product.category] = append(Products[product.category], product) + } else { + Products[product.category] = ProductGroup{} + } + } +}