В Tour of Go , я изменил количество отправителей, чтобы оно было больше, чем количество каналов. Когда я удалил ключевое слово go
с префиксом функции fibonacci
, программа потерпела крах, но, если ключевое слово go
останется, программа запустится правильно.
код здесь:
package main
import (
"fmt"
)
func fibonacci(n int, c chan int) {
x, y := 0, 1
for i := 0; i < n; i++ {
c <- x
x, y = y, x+y
}
close(c)
}
func main() {
c := make(chan int, 10)
fibonacci(cap(c)+10, c)
for i := range c {
fmt.Println(i)
}
}
сбой этого кода:
package main
import (
"fmt"
)
func fibonacci(n int, c chan int) {
x, y := 0, 1
for i := 0; i < n; i++ {
c <- x
x, y = y, x+y
}
close(c)
}
func main() {
c := make(chan int, 10)
go fibonacci(cap(c)+10, c)
for i := range c {
fmt.Println(i)
}
}
и этот код работает правильно.