MST

星途 面试题库

面试题:Go中WaitGroup在复杂场景下的应用

假设有一个电商系统,需要并发查询多个商品的库存信息,每个查询操作是一个独立的并发任务,查询结果是商品的库存数量。使用WaitGroup来确保所有库存查询任务完成后,计算并返回所有商品库存的总和。请写出实现该功能的Go代码。
37.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "sync"
)

// 模拟查询单个商品库存的函数
func queryStock(商品ID int, wg *sync.WaitGroup, resultChan chan int) {
    defer wg.Done()
    // 这里模拟实际的库存查询逻辑,简单返回商品ID作为库存数量
    resultChan <- 商品ID
}

func main() {
    var wg sync.WaitGroup
    resultChan := make(chan int)
    商品IDs := []int{1, 2, 3, 4, 5}

    for _, 商品ID := range 商品IDs {
        wg.Add(1)
        go queryStock(商品ID, &wg, resultChan)
    }

    go func() {
        wg.Wait()
        close(resultChan)
    }()

    totalStock := 0
    for stock := range resultChan {
        totalStock += stock
    }

    fmt.Printf("所有商品库存总和: %d\n", totalStock)
}