MST

星途 面试题库

面试题:Go中如何在管道中实现简单的数据同步与错误处理

请编写一段Go代码,创建一个管道用于两个goroutine之间的数据传递。其中一个goroutine向管道发送数据,另一个goroutine从管道接收数据。并且在发送或接收数据过程中,如果出现错误,要正确地进行处理并将错误信息打印出来。
44.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func sendData(ch chan int, errCh chan error) {
    defer close(ch)
    defer close(errCh)
    for i := 0; i < 5; i++ {
        if i == 3 {
            errCh <- fmt.Errorf("模拟发送数据时出现错误")
            return
        }
        select {
        case ch <- i:
        case err := <-errCh:
            fmt.Println("发送数据错误:", err)
            return
        }
    }
}

func receiveData(ch chan int, errCh chan error) {
    defer close(errCh)
    for {
        select {
        case num, ok := <-ch:
            if!ok {
                return
            }
            fmt.Println("接收到数据:", num)
        case err := <-errCh:
            fmt.Println("接收数据错误:", err)
            return
        }
    }
}

func main() {
    ch := make(chan int)
    errCh := make(chan error)

    go sendData(ch, errCh)
    go receiveData(ch, errCh)

    select {}
}