sync.WaitGroup provides a goroutine synchronization mechanism in Golang, and is used for waiting for a collection of goroutines to finish. 1.Golang中的go func()是异步的,主函数main中的协程并不会等待go func()的完成,一旦main中协程执行结束就立马退出,然而go func()的协程可能还在执行。如果go func()中执行的函数的时间远远小于main中的协程执行时间,这个时候main协程退出了,go func()协程已经完成任务了。 2.如果想让main中的协程等待其他的协程完成任务后再退出,只能使用同步方法,例如sync.WaitGroup 3.如下是代码示例 package main import ( "time" "fmt" "sync" ) type Job struct { name string i int max int } func Exec(job *Job,wg *sync.WaitGroup) { defer wg.Done() for job.i< job.max { fmt.Printf("%s%d\n",job.name,job.i) time.Sleep(1 * time.Millisecond) job.i++ } } func main() { var wg sync.WaitGroup wg.Add(2) job1 := Job{} job1.max = 6 job1.name = "job1_" job2 := Job{} job2.max = 3 job2.name = "job2_" go Exec(&job1,&wg) Exec(&job2,&wg) wg.Wait() }