使用golang 的channel特性来实现Fibonacci函数

package main

import "fmt"

//fibonacci
func fibonacci(c, quit chan int) {
	x, y := 0, 1
	//开启一个循环
	for {
		//通过select 获取通道数据变化,做出对应case
		select {
		//如果c channel 可以存储值
		case c <- x:
			//fibonacci 计算
			x, y = y, x+y
		//如果quit channel 有值取出 (没有值可取时是一直block的)
		case <-quit:
			//退出循环
			fmt.Println("quit")
			return
		}
	}
}
func main() {
	//两个无缓冲的channel (阻塞/block)通道
	c := make(chan int)
	quit := make(chan int)

	//起一个goroutine 去操作两个channel
	go func() {
		for i := 0; i < 10; i++ {
			// 循环的从channel取值,只有取出一个值,别的值才可以存入channel,有值可以存入channel 触发 case c <- x:
			fmt.Println(<-c)
		}
		//向channel 设置值
		quit <- 0
	}()
	fibonacci(c, quit)
}