Here is Go's famous fizz buzz program using switch / case and if / else conditions. The problem is that using switch / case creates unexpected output, and if / else (with the same conditions) works fine. I know that switch / case in golang is different from other C-family languages, but what is wrong with this piece of code?
func main() { const ( FIZZ = 3 BUZZ = 5 ) //section with switch/case gives unexpected output for i := 1; i <= 30; i++ { switch { case i % FIZZ == 0: fmt.Printf("%d fizz\t", i%3) fallthrough case i % BUZZ == 0: fmt.Printf("%d buzz\t", i%5) } fmt.Printf("\t%d\n", i) } fmt.Printf("now towards the if/else\n") //section with if/else works as expected for i := 1; i <= 30; i++ { if i % FIZZ == 0 { fmt.Printf("%d fizz\t", i%3) } if i % BUZZ == 0 { fmt.Printf("%d buzz\t", i%5) } fmt.Printf("\t%d\n", i) }
}
source share