协程注意点
func test(){
for i:=0;i<10;i++{
fmt.Println("test()你好golang-", i)
time.Sleep(time . Millisecond * 100)
}
}
func main(){
go test()//开启协程
for i:=0;i<10;i++{
fmt.Println("test()你好golang-", i)
time.Sleep(time . Millisecond * 50)
}
}
当主线程的时间小于协程时间时,主线程结束即程序结束。
使用sync.WaitGroup
解决
使用方法如下:
var wg sync.WaitGroup//定义协程等待
func test(){
for i:=0;i<10;i++{
fmt.Println("test()你好golang-", i)
time.Sleep(time . Millisecond * 100)
}
wg.Done()//协程结束
}
func main(){
wg.Add(1) //协程计数器加1
go test()//开启协程
for i:=0;i<10;i++{
fmt.Println("test()你好golang-", i)
time.Sleep(time . Millisecond * 50)
}
wg.Wait()//等待协程执行完毕
}
wg.Done()
可以写在函数开头 但是要加defer
即:
func test(){
defer wg.Done()//延迟执行协程结束(函数运行完毕之后调用)
for i:=0;i<10;i++{
fmt.Println("test()你好golang-", i)
time.Sleep(time . Millisecond * 100)
}
}