Goroutine

调用函数时前面加上go关键字,就可以创建一个Goroutine
可以创建多个Goroutine去执行多个函数

  1. func main() {
  2. go func(){
  3. fmt.Println("hello")
  4. }()
  5. }

运行以上代码,会惊喜的发现你的控制台并没有打印任何东西,这是因为协程还未执行完,主进程就已经结束了

  1. func main() {
  2. go func(){
  3. fmt.Println("hello")
  4. }()
  5. time.Sleep(1 * time.Second)
  6. }

通过time.Sleep()函数让主函数等待Goroutine执行完成,这浪费的更多的时间

  1. // 创建等待组
  2. wg := &sync.WaitGroup{}
  3. // 添加计数
  4. wg.Add(1)
  5. go func() {
  6. fmt.Println("hello")
  7. wg.Done()
  8. }()
  9. // 等待计数归零
  10. wg.Wait()

Channel

Goroutine Pool

Time Ticker

Select

Sync WaitGroup

Sync Lock