是否可以在Go中让通道在协程结束后保持打开状态?
大家好!我是一名Go初学者,正在尝试理解通道。我有这样一段代码:
```go
package main
import (
"fmt"
"time"
)
func worker(done chan bool) {
fmt.Println("工作中...")
time.Sleep(2 * time.Second)
fmt.Println("完成!")
// 这里我没有关闭通道
done <- true
}
func main() {
done := make(chan bool)
go worker(done)
// 等待结果
result := <-done
fmt.Println("结果:", result)
// done通道会怎样?它保持打开状态。
time.Sleep(1 * time.Second)
fmt.Println("程序结束")
}
```
代码能运行,但我注意到我从未关闭`done`通道。文档说通道需要关闭,但我不理解是否必须这样做。在我的例子中,程序结束,通道就消失了。但如果程序运行很长时间,我创建了很多这样的通道呢?这会导致内存泄漏或其他问题吗?是否有规则规定何时必须关闭通道?