package main
import (
"fmt"
)
type Chan struct {
isquit bool
isclosed bool
ch chan int
quit chan bool
}
func main() {
ch := &Chan{isquit: false, isclosed: false, ch: make(chan int), quit: make(chan bool)}
go func() {
// i := 0
x, y := 1, 1
for {
if ch.isquit {
ch.isclosed = true
close(ch.ch)
return
} else if !ch.isclosed {
ch.ch <- x
x, y = y, x+y
}
}
}()
for num := range ch.ch {
if num >= 50 {
ch.isquit = true
close(ch.quit)
fmt.Println("quit")
break
}
fmt.Println("num=", num)
}
}
我认为这是一个好的设计。