在你的 for 循环完成后,你所有的 goroutine 都在异步运行。在你的 for 循环结束时i等于 6,因此,你的 goroutine 每个都记录数字 6。要解决这个问题,您可以创建一个闭包,并在其中保存当前的值,i以便当 goroutine 运行时,它会以正确的值运行i。为此,只需更改您的代码,使其看起来像go func(x int) { fmt.Println(x) wg.Done()}(i) // <--- "save" value of i at this point in time.这样,您可以“保存”i您告诉 goroutine 执行的函数内部的值,以便稍后,当 for 循环运行完成时,它不会使用当前值为i6 的值;相反,它使用goroutine 创建时的旧值。i