В настоящее время я работаю над Tour of Go, и я думал, что goroutines были использованы аналогично генераторам Python, особенно с Вопрос 66. Я думал, что 66 выглядит сложным, поэтому я переписал его так:
package main
import "fmt"
func fibonacci(c chan int) {
x, y := 1, 1
for {
c <- x
x, y = y, x + y
}
}
func main() {
c := make(chan int)
go fibonacci(c)
for i := 0; i < 10; i++ {
fmt.Println(<-c)
}
}
Это похоже на работу. Несколько вопросов:
- Если я укажу размер буфера на канале, чтобы сказать, 10,
fibonacci
заполнит еще 10 точек, как можно быстрее, иmain
будет съедать пятна так быстро, как только может. Это правильно? Это будет более результативным, чем размер буфера 1 за счет памяти, правильно? - Поскольку канал не закрывается отправителем
fibonacci
, что происходит с памятью, когда мы выходим из сферы действия здесь? Мое ожидание состоит в том, что когдаc
иgo fibonacci
выходит за пределы области видимости, канал и все на нем получают сбор мусора. Моя кишка говорит мне, что это, вероятно, не то, что происходит.