http://play.golang.org/p/uRHG-Th_2PGolang: некоторые вопросы на канале
я с трудом понять концепцию канала
package main
import (
"fmt"
)
func Fibonacci(limit int, chnvar chan int) {
x, y := 0, 1
for i := 0; i < limit; i++ {
chnvar <- x
x, y = y, x+y
}
close(chnvar)
v, ok := <-chnvar
fmt.Println(v, ok)
}
func main() {
chn := make(chan int, 10)
go Fibonacci(cap(chn), chn)
for elem := range chn {
fmt.Printf("%v ", elem)
}
}
//1 1 2 3 5 8 13 21 34
1) Как получить ложное значение от линии
v, ok := <-chnvar
Он говорит false, если больше нет значений. , а также false, если канал закрыт. Но в этом случае канал закрыт, но (?) Все равно получает истинное значение.
И если я выйду за закрытие, это паника.
Как и почему он возвращается сюда?
2) Линия
go Fibonacci(cap(chn), chn)
также работает без goroutine. В чем разница? Просто вопрос производительности.
Заранее спасибо