第一种,基于原生带缓存的channel
package main import "fmt" func main() { done := make(chan int, 10) for i := 0; i < cap(done); i++ { go func(j int) { fmt.Println("你好,世界" + fmt.Sprintf("%v", j)) done <- 1 }(i) } //等待N个后台线程完成 for i := 0; i < cap(done); i++ { <-done } }
第二种,通过使用sync.WaitGroup来等待
package main import ( "sync" "fmt" ) func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(j int) { fmt.Println("你好,世界" + fmt.Sprintf("%v", j)) wg.Done() }(i) } wg.Wait() }