MST

星途 面试题库

面试题:Go语言中通道与Goroutine错误处理之基础应用

在Go语言中,假设你有一个Goroutine通过通道接收数据并进行处理,当处理过程中发生错误时,如何优雅地将错误信息通过通道传递出来,并在主Goroutine中进行捕获和处理?请编写一段示例代码来展示。
16.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func worker(resultChan chan<- interface{}) {
    defer close(resultChan)
    // 模拟处理数据
    data := 10
    if data > 5 {
        err := fmt.Errorf("处理数据 %d 时出错", data)
        resultChan <- err
        return
    }
    resultChan <- fmt.Sprintf("处理成功: %d", data)
}

func main() {
    resultChan := make(chan interface{})
    go worker(resultChan)

    for res := range resultChan {
        if err, ok := res.(error); ok {
            fmt.Printf("捕获到错误: %v\n", err)
        } else {
            fmt.Println(res)
        }
    }
}