2 回答
TA贡献1773条经验 获得超3个赞
Close
是 goroutine 发送到通道以通知接收方您已完成此通道的好方法。另一种方式(你的问题)恕我直言是不可撤销的,至少是直接的。您可以添加一个完成的其他通道,它向您的斐波那契生成 goroutine 发出任务结束的信号。
TA贡献1883条经验 获得超3个赞
这是您的示例的修改版本,它以允许(尽管不一定明智)的方式使用通道:
package main
import (
"fmt"
"time"
)
func fib(c chan int) {
c <- 0
c <- 1
n, m := 0, 1
for {
temp := n + m
n = m
m = temp
c <- m
if m > 100000000 {
close(c)
break
}
}
}
func main() {
start := time.Now()
lastFib, newFib := 0, 0
ok := true
c := make(chan int)
go fib(c)
for {
newFib, ok = <-c
if !ok {
fmt.Println(lastFib)
break
}
lastFib = newFib
}
fmt.Println(time.Now().Sub(start))
}
- 2 回答
- 0 关注
- 201 浏览
添加回答
举报