В настоящее время я работаю над Tour of Go , и я подумал, что горутины использовались аналогично генераторам 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)
}
}
Кажется, это работает. Пара вопросов:
fibonacci
заполнит еще 10 мест как можно быстрее, а main
съест места так быстро, как только сможет. Это правильно? Это было бы более производительно, чем размер буфера 1 за счет памяти, верно?fibonacci
, что происходит с памятью -, когда мы выходим за пределы области действия? Я ожидаю, что как только c
и go fibonacci
выйдут за рамки, канал и все, что на нем, будет собирать мусор -. Моя интуиция подсказывает мне, что это, вероятно, не то, что происходит.