MST

星途 面试题库

面试题:Go中闭包在并发场景下的应用

在Go语言中,假设有一个并发任务需要处理一批数据,每个任务需要一个特定的上下文信息,且这个上下文信息会随着任务处理的不同阶段而发生变化。请使用闭包来实现这种场景,简要描述你的实现思路并给出代码示例。
25.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义一个函数,该函数接收初始上下文信息作为参数,并返回另一个函数(闭包)。
  2. 闭包函数负责实际的任务处理逻辑,在处理过程中可以根据需要修改上下文信息。
  3. 在并发执行闭包函数时,每个闭包函数都有其独立的上下文信息。

代码示例

package main

import (
    "context"
    "fmt"
    "sync"
)

// createTask 创建一个任务处理函数
func createTask(ctx context.Context, initialValue int) func() {
    value := initialValue
    return func() {
        // 模拟任务处理的不同阶段
        for i := 0; i < 3; i++ {
            // 根据阶段更新上下文信息
            value = value + i
            fmt.Printf("Task with context value %d at stage %d\n", value, i)
        }
    }
}

func main() {
    var wg sync.WaitGroup
    ctx := context.Background()

    // 创建并启动多个并发任务
    for i := 0; i < 3; i++ {
        task := createTask(ctx, i*10)
        wg.Add(1)
        go func() {
            defer wg.Done()
            task()
        }()
    }

    wg.Wait()
}