消息关闭
    暂无新消息!

channel 使用遇到的问题

问题作者 : 温迷2017-08-02发布
在使用channel时,遇到两种情况,一种使用channel可以正常使用,另外一种不可用。代码如下:

package main

import "fmt"

func sum(a []int, c chan int) {
total := 0
for _, v := range a {
total += v
}
c <- total  // send total to c
}

func main() {
a := []int{7, 2, 8, -9, 4, 0}

c := make(chan int)
go sum(a[:len(a)/2], c)
go sum(a[len(a)/2:], c)
x, y := <-c, <-c  // receive from c

fmt.Println(x, y, x + y)
}

在此处 通道可以正常使用,未报错。
但是我 在 main中直接使用时就会报错,如下:

d := make(chan int)
d <- 2


2个回答

︿ 2
你执行d <- 2这句话的时候d就会一直等待channel被关闭或者数据被读出,所以你必须再开一个协程进行channel关闭或者读出数据

package main

func main() {
a := make(chan int)
go func() {
a <- 2
}()
x := <-a
println(x)
}
︿ 2
报错信息如下:

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan send]: