Avatar ·

是否可以在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`通道。文档说通道需要关闭,但我不理解是否必须这样做。在我的例子中,程序结束,通道就消失了。但如果程序运行很长时间,我创建了很多这样的通道呢?这会导致内存泄漏或其他问题吗?是否有规则规定何时必须关闭通道?