gpt4 book ai didi

go - 尝试向已关闭的 channel 插入值时避免 panic

转载 作者:IT王子 更新时间:2023-10-29 01:25:31 27 4
gpt4 key购买 nike

package main

import (
"fmt"
"time"
)

func fib() chan int {
c := make(chan int)

go func() {
c <- 0
c <- 1

n, m := 0, 1
for {
temp := n + m
n = m
m = temp
c <- m // This results in panic, when the channel is closed
}
}()

return c
}

func main() {
start := time.Now()
var lastFib int
c := fib()

for i := 0; i != 1000000; i++ {
lastFib = <-c
}

close(c)
fmt.Println(lastFib)
fmt.Println(time.Now().Sub(start))
}

以最惯用的方式,当 channel 关闭时,如何避免 goroutine 中的 panic ?或者我应该完全避免使用 close 吗?

我不是在寻找替代方法(例如闭包)来实现相同的目的,只是想更好地了解 channel 。

最佳答案

Close 是 goroutine 发送到 channel 以向接收方发送信号表明您已完成此 channel 的好方法。反过来(你的问题)是恕我直言不可撤销的,至少是直接的。您可以添加一个完成的其他 channel ,该 channel 表示您的斐波那契生成 goroutine 的职责结束。

关于go - 尝试向已关闭的 channel 插入值时避免 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com