文章目录
用var定义channel且不make
wg := sync.WaitGroup{
}
var ch chan string
read := func() {
fmt.Println("reading")
s := <-ch
fmt.Println("read:", s)
wg.Done()
}
write := func() {
fmt.Println("writing")
s := "t"
ch <- s
fmt.Println("write:", s)
wg.Done()
}
wg.Add(2)
go read()
go write()
fmt.Println("waiting")
wg.Wait()
输出:
waiting
writing
reading
fatal error: all goroutines are asleep - deadlock!
这种情况并不是报错空指针,而是死锁。加上make看看
用var定义channel且make
wg := sync.WaitGroup{
}
var ch = make(chan string)
read := func() {
fmt.Println("reading")
s := <-ch
fmt.Println("read:", s)
wg.Done()
}
write := func() {
fmt.Println("writing")
s := "t"
ch <- s
fmt.Println("write:", s)
wg.Done()
}
wg.Add(2)
go read()
go write()
输出
waiting
writing
reading
read: t
write: t
这种情况没什么毛病,之所以先输出的read,是因为IO机制。下面给写加上for
直给写操作加for
wg := sync.WaitGroup{
}
var ch = make(chan string)
read := func() {
fmt.Println("reading")
s := <-ch
fmt.Println("read:", s)
wg.Done()
}
write := func() {
for {
fmt.Println("writing")
s := "t"
ch <- s
fmt.Println("write:", s)
}
wg.Done