これは、switch/case および if/else 条件を使用した Go の有名な「fizz Buzz」プログラムです。問題は、スイッチ/ケースを使用すると予期しない出力が生成される一方で、if/else (同じ条件で) は正常に機能することです。golang の switch/case が他の C ファミリー言語と異なることは知っていますが、このコード フラグメントの何が問題なのですか?
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)
}
}