面试题答案
一键面试设计思路
- 任务划分:明确哪些任务是独立的,哪些任务依赖其他任务的结果。
- 使用
WaitGroup
:为每个独立任务创建一个goroutine
,并使用WaitGroup
来等待所有任务完成。 - 数据传递:对于有依赖关系的任务,通过通道(
channel
)或共享变量来传递任务结果。
代码实现过程
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
// 独立任务1
wg.Add(1)
var result1 int
go func() {
defer wg.Done()
result1 = 10 // 模拟任务执行结果
}()
// 依赖任务1结果的任务2
wg.Add(1)
var result2 int
go func() {
defer wg.Done()
wg.Wait() // 等待任务1完成
result2 = result1 * 2 // 使用任务1的结果
}()
wg.Wait() // 等待所有任务完成
fmt.Printf("Result1: %d, Result2: %d\n", result1, result2)
}
在上述代码中:
- 首先为独立任务1和依赖任务1结果的任务2分别添加到
WaitGroup
中。 - 独立任务1在
goroutine
中执行并计算出结果result1
。 - 任务2在
goroutine
中,先使用wg.Wait()
等待任务1完成,然后获取result1
并计算出result2
。 - 最后,主
goroutine
使用wg.Wait()
等待所有任务完成,并输出结果。