package main
import (
"fmt"
"sync"
"time"
)
func f(wg *sync.WaitGroup, val string) {
fmt.Println(val, "begin")
time.Sleep(2 * time.Second) // 这里处理需要3秒钟
fmt.Printf("Finished: %v - %v\n", val, time.Now())
wg.Done()
}
func main() {
t1 := time.Now()
var wg sync.WaitGroup
wg.Add(3) // 我们要做三个并发任务,这里添加3个协程
go f(&wg, "goroutine A") // 第一个任务:实行函数 f
// 第二个任务,匿名闭包函数
go func(wg *sync.WaitGroup, val string) {
fmt.Println(val, "begin")
time.Sleep(3 * time.Second) // 处理需要3秒钟
fmt.Printf("Finished: %v - %v\n", val, time.Now())
wg.Done()
}(&wg, "goroutine B") // 调用匿名函数
go f(&wg, "goroutine C") // 第三个任务,调用f 函数
wg.Wait() // 等待所有任务完成
fmt.Printf("Finished all goroutines: %v\n", time.Now())
t2 := time.Now()
fmt.Println("消耗时间:", t2.Sub(t1), "秒")
}
...