From 6e8aee98ebe96236d03d7ac312fa055940af1540 Mon Sep 17 00:00:00 2001 From: Yuri Norwood <76186754+yuri-norwood@users.noreply.github.com> Date: Sat, 4 Dec 2021 06:37:50 +1300 Subject: [PATCH] Showcase broader coverage of Go's features * Adds example of using Goroutines * Adds example of using channels * Adds example of using deferred closing --- fizzbuzz.go | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/fizzbuzz.go b/fizzbuzz.go index 771509d..4c28fd5 100644 --- a/fizzbuzz.go +++ b/fizzbuzz.go @@ -1,24 +1,30 @@ package main -import ( - "fmt" -) +import "fmt" + +func fizzbuzz(count int, nums chan string) { + defer close(nums) + + for i := 1; i <= count; i++ { + switch { + case i%15 == 0: + nums <- "FizzBuzz" + case i%5 == 0: + nums <- "Buzz" + case i%3 == 0: + nums <- "Fizz" + default: + nums <- fmt.Sprint(i) + } + } +} func main() { + nums := make(chan string) - for i := 1; i <= 100; i++ { - divBy3 := i%3 == 0 - divBy5 := i%5 == 0 + go fizzbuzz(100, nums) - if divBy3 && divBy5 { - fmt.Println("FizzBuzz") - } else if divBy3 { - fmt.Println("Fizz") - } else if divBy5 { - fmt.Println("Buzz") - } else { - fmt.Println(i) - } - - } + for num := range nums { + fmt.Println(num) + } }