使用Channel特性实现斐波那契函数
使用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)
}
阅读其他文章