close 未初始化的channel 会panic func main() { var Student struct{ msg chan string } //Student.msg<-"你好" //<-Student.msg close(Student.msg) } panic: close of nil channel goroutine 1 [running]: main.main() close channel 会唤醒所有监听他的goroutine func main() { ch := make(chan struct{}) wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ { go func(num int) { fmt.Println(num,"启动") tmp := <-ch fmt.Println(num,"退出",tmp) wg.Done() }(i) } time.AfterFunc(5*time.Second, func() { close(ch) }) wg.Wait() } 9 启动 5 启动 6 启动 7 启动 8 启动 1 启动 4 启动 0 启动 3 启动 2 启动 9 退出 {} 2 退出 {} 3 退出 {} 0 退出 {} 4 退出 {} 1 退出 {} 8 退出 {} 7 退出 {} 6 退出 {} 5 退出 {}