當我做一些去實踐代碼,我遇到一個通道可以這樣兩次關閉了一個問題:爲什麼Go的頻道可以關閉兩次?
// jobs.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
jobs := make(chan int, 5)
done := make(chan bool)
go func() {
for {
j,more := <-jobs
fmt.Println("receive close: ", j, more)
done <- true
}
}()
close(jobs)
<- done
}
輸出:
~ go run jobs.go
Hello, playground
receive close: 0 false
receive close: 0 false
但是,當我手動兩次關閉通道,我得到了panic: close of closed channel
。
爲什麼上面的代碼可以接收兩次?