参考答案
结论:获取goroutine内函数返回值,主流方案是用channel传递,或借助共享变量配合sync.WaitGroup/互斥锁。原理:go语句启动并发后,被调函数的返回结果会被丢弃,必须显式传出。方案1:无缓冲/缓冲channel接收,如c := make(chan int, 1); go func() { c <- compute() }(); res := <-c;方案2:闭包捕获外部变量,var res int; var wg sync.WaitGroup; wg.Add(1); go func() { defer wg.Done(); res = compute() }(); wg.Wait(); 对比:channel天然避免数据竞态且能同步,WaitGroup仅等待完成需自行加锁;注意goroutine泄露,确保channel被接收或带缓冲。