1.向一个已关闭的channel发送元素会引起panic
panic: send on closed channel
package main
import (
"sync"
"time"
)
func main() {
ch := make(chan struct{})
close(ch)
var wg sync.WaitGroup
wg.Add(1)
go func() {
ch <- struct{}{}
time.Sleep(time.Second*2)
wg.Done()
}()
wg.Wait()
}
2. 在发送端关闭Channel,接收端还会继续接收到通道中的元素
package main
import (
"sync"
"fmt"
)
func main() {
ch := make(chan int,10)
for i := 0 ; i < 10 ; i++ {
ch <- i
}
close(ch)
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
for v := range ch {
fmt.Println(v)
}
}()
wg.Wait()
fmt.Println("over")
}
3. select...case... 尝试从close的channel接受数据会直接获取该channel类型的空值