Go 在这种情况下没有看到恐慌
我看到了恐慌Go 在这种情况下没有看到恐慌,go,Go,我看到了恐慌 func main() { ch := make(chan int) ch <- 1 fmt.Println(<-ch) } fatal error: all goroutines are asleep - deadlock! goroutine 1 [chan send]: main.main() /tmp/sandbox058504389/main.go:10 +0x60 func main(){ ch:=制造(成交量) 在这两
func main() {
ch := make(chan int)
ch <- 1
fmt.Println(<-ch)
}
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/tmp/sandbox058504389/main.go:10 +0x60
func main(){
ch:=制造(成交量)
在这两个例子中,这是通道的行为。有两种类型的通道,缓冲和非缓冲
缓冲通道有一定的容量来存储通道内的项目。就像缓冲区一样
无缓冲通道在通道中没有存储项目的位置,这意味着在将任何内容发送到无缓冲通道或写入无缓冲通道之前,需要从中读取很多内容。这意味着您必须在通道的每一端都有一个goroutine,一个准备发送,另一个准备接收
在第一个示例中:
func main() {
ch := make(chan int)
ch <- 1
fmt.Println(<-ch)
}
func main() {
var wg sync.WaitGroup
ch := make(chan int)
wg.Add(1)
go func() {
<-ch
wg.Done()
}()
wg.Wait()
}
func main(){
ch:=制造(成交量)
正如预期的那样,这个例子令人恐慌:
func main() {
var wg sync.WaitGroup
ch := make(chan int)
wg.Add(1)
go func() {
<-ch
wg.Done()
}()
wg.Wait()
}