Golang 学习笔记 - goroutine和sync.WaitGroup使用示例


  1. package main
  2. import (
  3. "fmt"
  4. "sync"
  5. )
  6. var wg = sync.WaitGroup{}
  7. func helloSun() {
  8. fmt.Println("hello Sun")
  9. wg.Done() // 计数器-1
  10. }
  11. func main() {
  12. // main_1()
  13. main_10000()
  14. }
  15. func main_1() {
  16. wg.Add(1) // 计数器+1
  17. go helloSun()
  18. fmt.Println("hello main")
  19. wg.Wait() // 阻塞等待计数器归零再结束
  20. }
  21. // 并发10000并使用匿名函数
  22. func main_10000() {
  23. wg.Add(10000) // 直接到10000
  24. for i := 0; i < 10000; i++ {
  25. go func(i int) {
  26. fmt.Println("hello ", i) // i必须从匿名函数中传入
  27. wg.Done() // 计数器-1
  28. }(i)
  29. }
  30. fmt.Println("hello main")
  31. wg.Wait() // 阻塞等待计数器归零再结束
  32. }