开发者社区 问答 正文

Go并发基础问题求解?报错

我正在学习GO语言编程,看到无闻老师的并发编程这一章,跟着老师敲一样的代码,视频里的运行正常,而我的却一直报错,实在不明白为什么,下面贴出我和老师的代码:

无闻老师的:

老师的运行结果:

我的代码:

var c chan string

func Pingpang() {
    i := 0
    for {
        fmt.Println(<-c)
        c <- fmt.Sprintf("From Pingpang: Hi, #%d", i)
        i++
    }
}
func main() {
    c := make(chan string)
    go Pingpang()
    for i := 0; i < 10; i++ {
        c <- fmt.Sprintf("From main: Hello, #%d", i)
        fmt.Println(<-c)
    }
}

我的结果:

展开
收起
爱吃鱼的程序员 2020-06-14 16:27:07 568 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    问题在这, 

    c:=make(chanstring)

    =和:=有区别的,简单说,c:=*这里这个chanc是一个局部变量了,而不是外面定义那个变量,故而Pingpang并不能从这个c里面独到东西,而这个chan又是没有缓存的,main里面向c中写的时候会阻塞,而又没有其他routine会去读,所以就deadlock啦。

    大概应该,就是这样,go我也不怎么会啊。



    问题就在这,谢谢!
    2020-06-14 16:27:24
    赞同 展开评论
问答分类:
问答地址: