package main
import (
"fmt"
)
var complete chan string = make(chan string)
func printstring(i int) {
fmt.Println("打印这里", i)
complete <- "妥了"
}
func main() {
go printstring(1)
msg := <-complete
fmt.Println(msg)
printstring(2)
}
已经有一写一读,为什么还会死锁?怎么样才能不死锁呢?
第 1 条附言 ·
上面的兄弟说无缓冲区有写入必须有读取这个意思的,那要是我只在main中执行:go printstring(1) time.Sleep(3 * time.Second) 这样还是正常执行的 又怎么理解?
第 2 条附言 ·
看了下面的分析感觉快理解了,再多测试几下发现又蒙蔽了
不是只有写没有读的问题。后面加上读,也会报错。
似乎是不带缓冲区的channel,用法特殊,只支持不同协程之间读写。或者根本就是GO的一个bug。
make(chan string,1),就不会报错。
很怪异。
#6