lazy_evaluation.go 419 B

12345678910111213141516171819202122232425262728293031
  1. // lazy_evaluation.go
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. var resume chan int
  7. func integers() chan int {
  8. yield := make(chan int)
  9. count := 0
  10. go func() {
  11. for {
  12. yield <- count
  13. count++
  14. }
  15. }()
  16. return yield
  17. }
  18. func generateInteger() int {
  19. return <-resume
  20. }
  21. func main() {
  22. resume = integers()
  23. fmt.Println(generateInteger()) //=> 0
  24. fmt.Println(generateInteger()) //=> 1
  25. fmt.Println(generateInteger()) //=> 2
  26. }