package main
import (
"time"
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
mc := make(chan int)
go func(mcc chan int, wgg sync.WaitGroup){
wgg.Add(+1)
defer wgg.Done()
time.Sleep(10 * time.Second)
mcc <- 5
}(mc, wg)
wg.Wait()
for {
fmt.Println("loop")
time.Sleep(1000 * time.Millisecond)
select{
case data := <- mc:
fmt.Println(data)
break
default:
continue
}
}
}
初学go,看了语法实践了一下,应该是理解有误。创建一个go协程,10秒后向管道中输入一个数值,然后下面循环,如果从管道中获取到数据则break。但为何运行后,到第10秒打印出数字5之后仍然每秒打印一次loop?
case的break 改为return
还有一些其他方式
https://golang.org/ref/spec#B...
A "break" statement terminates execution of the innermost "for", "switch", or "select" statement within the same function.
这是官方文档,可以去看下
这些基础的知识还是要打牢点