MST

星途 面试题库

面试题:Go语言匿名函数在并发编程中的复杂应用

在Go语言的并发编程中,匿名函数常与goroutine和channel配合使用。请实现一个功能,使用匿名函数、goroutine和channel来模拟多个任务并行执行,并收集每个任务的执行结果,同时要考虑任务执行过程中可能出现的错误处理。
16.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func main() {
    tasks := []func() (int, error){
        func() (int, error) { return 1, nil },
        func() (int, error) { return 2, nil },
        func() (int, error) { return 0, fmt.Errorf("error in task") },
    }

    results := make(chan struct {
        result int
        err    error
    }, len(tasks))

    for _, task := range tasks {
        go func(t func() (int, error)) {
            res, err := t()
            results <- struct {
                result int
                err    error
            }{res, err}
        }(task)
    }

    close(results)

    for res := range results {
        if res.err != nil {
            fmt.Printf("Task failed with error: %v\n", res.err)
        } else {
            fmt.Printf("Task result: %d\n", res.result)
        }
    }
}

解释:

  1. 定义一个tasks切片,其中每个元素是一个返回结果和错误的匿名函数。
  2. 创建一个results通道,用于接收每个任务的执行结果和可能的错误。
  3. 使用goroutine并行执行每个任务,将任务结果和错误发送到results通道。
  4. 关闭results通道后,通过for... range循环读取通道中的结果,处理错误并打印结果。