package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {

    var wg sync.WaitGroup
    wg.Add(3)
    wg.Add(1)

    go func() {
        fmt.Println("3秒开始")
        time.Sleep(3 * time.Second)
        fmt.Println("3秒结束")
        wg.Done()
    }()
    go func() {
        fmt.Println("1秒开始")
        time.Sleep(1 * time.Second)
        fmt.Println("1秒结束")
        wg.Done()
    }()
    go func() {
        fmt.Println("2秒开始")
        time.Sleep(2 * time.Second)
        fmt.Println("2秒结束")
        wg.Done()
    }()
    go func() {
        fmt.Println("4秒开始")
        time.Sleep(4 * time.Second)
        fmt.Println("4秒结束")
        wg.Done()
    }()

    fmt.Println("waiting")
    wg.Wait()
}

下面是执行结果。

2019-11-27 14-17-39.2019-11-27 14_22_03.gif