Вопрос: Как написать собственный итератор в стиле range (через канал) и какие минусы?
Go
Junior
Без компании
Вопрос: Как написать собственный итератор в стиле range (через канал) и какие минусы?
Ответы
До появления "range over func" (если его нет в вашей версии), часто делают итератор как канал. Минусы: горутины, аллокации, сложнее отмена.
```go
package main
import "fmt"
func Iter(n int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for i := 0; i < n; i++ {
out <- i
}
}()
return out
}
func main() {
for v := range Iter(3) {
fmt.Println(v)
}
}
```