MST

星途 面试题库

面试题:Go中WaitGroup在分布式系统简单场景的应用

假设在一个简单的分布式系统中,有多个微服务需要依次完成数据处理并返回结果,最后汇总这些结果。请用Go语言结合WaitGroup实现这个过程,简述思路并编写核心代码。
45.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

思路

  1. 每个微服务可以定义为一个独立的Go协程。
  2. 使用WaitGroup来同步这些协程,确保所有微服务都完成数据处理后再进行结果汇总。
  3. 每个协程完成任务后调用WaitGroupDone方法。
  4. 主协程使用WaitGroupWait方法等待所有协程完成。

核心代码

package main

import (
    "fmt"
    "sync"
)

// 模拟微服务处理函数
func microservice1(resultChan chan int, wg *sync.WaitGroup) {
    defer wg.Done()
    // 模拟数据处理
    resultChan <- 10
}

func microservice2(resultChan chan int, wg *sync.WaitGroup) {
    defer wg.Done()
    // 模拟数据处理
    resultChan <- 20
}

func main() {
    var wg sync.WaitGroup
    resultChan1 := make(chan int)
    resultChan2 := make(chan int)

    // 启动微服务1
    wg.Add(1)
    go microservice1(resultChan1, &wg)
    // 启动微服务2
    wg.Add(1)
    go microservice2(resultChan2, &wg)

    go func() {
        wg.Wait()
        close(resultChan1)
        close(resultChan2)
    }()

    var total int
    for result := range resultChan1 {
        total += result
    }
    for result := range resultChan2 {
        total += result
    }

    fmt.Printf("汇总结果: %d\n", total)
}