英文:
Array of channels
问题
我有一个使用通道数组的任务。
我不明白,为什么这段代码不起作用?
package main
import "fmt"
func run() {
chann[0] <- 1
}
var chann = make([]chan int, 2)
func main() {
go run()
obj := <- chann[0]
fmt.Println(obj)
}
我将为您翻译这段代码:
package main
import "fmt"
func run() {
chann[0] <- 1
}
var chann = make([]chan int, 2)
func main() {
go run()
obj := <- chann[0]
fmt.Println(obj)
}
请注意,这段代码中的通道数组 chann
是一个长度为 2 的切片,其中每个元素都是一个 chan int
类型的通道。在 run
函数中,我们尝试将整数值 1
发送到 chann[0]
通道中。然后,在 main
函数中,我们使用 <- chann[0]
从 chann[0]
通道中接收一个值,并将其赋给变量 obj
。最后,我们使用 fmt.Println
打印出 obj
的值。
如果您有任何其他问题,请随时提问。
英文:
I have an assignment to use arrays of channels.
I do not understand. Why this does not work?
package main
import "fmt"
func run() {
chann[0] <- 1
}
var chann = make([]chan int, 2)
func main() {
go run()
obj := <- chann[0]
fmt.Println(obj)
}
答案1
得分: 8
你已经初始化了通道数组,但没有初始化通道本身。
至于为什么会发生死锁,这是因为一个未初始化或被设置为nil的通道值会一直阻塞。(参考这篇文章:http://dave.cheney.net/tag/golang-3)
英文:
You have initialized the array of channels, but not the channels themselves.
As for why it deadlocks; this is due to the fact that a channel value that has not been initalised, or has been set to nil will always block. (See this article)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论