题目序号:(421, 3235)
题目来源:腾讯
频次:2
答案1:(dema)
Sleep(不常用),在main方法退出之前 sleep 一段时间
package main import ( "fmt" "time" ) func main() { go func1() fmt.Println("main") // 这里睡眠一秒,等待其他协程结束 time.Sleep(1 * time.Second) } func func1() { fmt.Println("func1") }
通道(不常用),每个活动结束从通道中取出一个值,当所有活动的协程结束,关闭通道
package main import ( "fmt" ) var ( ch = make(chan struct{}) count = 1 // 表示协程数 ) func main() { go func1() fmt.Println("main") for range ch { // 每次取值将count减1,当count为0时关闭通道 count-- if count == 0 { close(ch) } } } func func1() { fmt.Println("func1") ch <- struct{}{} }
sync.WaitGroup(常用)
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func main() { wg.Add(1) // 添加计数 go func1() fmt.Println("main") wg.Wait() // 等待计数变为0 } func func1() { fmt.Println("func1") wg.Done() // 将计数减1 }
本文来自投稿,不代表本站立场,如若转载,请注明出处: