我想尝试 FizzBuzz 测试(为什么程序员不能编程),并使用了 Go。它基本上是从 1 到 100 循环,当循环计数器可被 3 整除时打印“Fizz”,被 5 整除时打印“Buzz”,被两者整除时打印“FizzBuzz”,否则只打印数字。
在以迭代和递归方式完成之后,我想同时(或通过使用通道)进行。我想出了以下代码,这让我感到惊讶:
func fizzbuzzconc() {
// Channels for communication
fizzchan := make(chan int)
buzzchan := make(chan int)
fizzbuzzchan := make(chan int)
nonechan := make(chan int)
// Start go routine to calculate fizzbuzz challenge
go func() {
for i := 1; i <= 100; i++ {
if i % 3 == 0 && i % 5 == 0 {
fizzbuzzchan <- i
} else if i % 3 == 0 {
fizzchan <- i
} else if i % 5 == 0 {
buzzchan <- i
} else {
nonechan <- i
}
}
}()
// When or how does this for loop end?
for {
select {
case i := <-fizzchan:
fmt.Println(i, "Fizz")
case i := <-buzzchan:
fmt.Println(i, "Buzz")
case i := <-fizzbuzzchan:
fmt.Println(i, "FizzBuzz")
case i := <-nonechan:
fmt.Println(i, i)
}
}
}
我无法理解 for 循环如何以及为什么停止。没有中断条件或返回语句。为什么它最终完成运行?
慕桂英3389331
慕沐林林
相关分类