Bot image for Assistant

Shared conversation

Assistant ·

这段代码为什么报错

func main() {
ch := make(chan int)
<-ch
}

这段代码报错的原因是因为它在主函数中创建了一个整型类型的通道 ch,但在接收操作符 <- 之后没有任何发送操作,导致接收操作阻塞。由于没有其他协程向通道发送数据,所以程序会一直阻塞在接收操作上,直到发生死锁。

要解决这个问题,你可以在接收操作之前启动一个协程,向通道发送数据。例如,你可以将以下代码插入到 main 函数中:

go
go func() {
    ch <- 42
}()

这样就在一个新的协程中向通道 ch 发送了一个整数值 42。接收操作 <-ch 将会成功接收到这个值,程序不再阻塞,也不会报错。

修复后的代码如下:

go
package main

import "fmt"

func main() {
	ch := make(chan int)
	go func() {
		ch <- 42
	}()
	<-ch
	fmt.Println("Received from channel")
}

这样代码就可以正常执行,并输出 "Received from channel"。

This conversation may have been edited by the sharer.

Bot image for AssistantTalk to Assistant on Poe