当我只向通道发送值时,它会出错。这是示例代码。
package main
import "fmt"
func main() {
ch := make(chan int)
ch <- 1
fmt.Println("Does not work")
}
在这里,我只是向通道发送值但没有收到任何东西。它给出一个错误
fatal error: all goroutines are asleep - deadlock!
但是当我运行以下代码时,它不会给出任何错误
package main
import "fmt"
func sum(s []int, c chan int) {
sum := 0
for _, v := range s {
sum += v
}
c <- sum // send sum to c
}
func main() {
s := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(s[:len(s)/2], c)
go sum(s[len(s)/2:], c)
fmt.Println("did not receive but still works")
}
并打印
did not receive but still works
我不明白为什么它在第二种情况下有效,而在第一种情况下却不起作用。即使在这两种情况下我都没有收到任何关于频道的价值。还有是什么导致了第一种情况下的死锁以及如何在第二种情况下避免死锁?
有只小跳蛙
慕神8447489
随时随地看视频慕课网APP
相关分类