MST

星途 面试题库

面试题:Go中Goroutine与通道在简单数据管道的应用

请编写一个Go程序,使用Goroutine和通道构建一个简单的数据管道。该管道接收一组整数,将每个整数平方后输出。要求展示如何启动Goroutine、传递数据以及处理通道的关闭。
46.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func square(input chan int, output chan int) {
    for num := range input {
        output <- num * num
    }
    close(output)
}

func main() {
    numbers := []int{1, 2, 3, 4, 5}
    input := make(chan int)
    output := make(chan int)

    go square(input, output)

    for _, num := range numbers {
        input <- num
    }
    close(input)

    for result := range output {
        fmt.Println(result)
    }
}

解释:

  1. square 函数
    • 它从 input 通道接收整数,将其平方后发送到 output 通道。
    • 使用 for... range 循环读取 input 通道,当 input 通道关闭时,循环结束。
    • 最后关闭 output 通道。
  2. main 函数
    • 定义一组整数 numbers
    • 创建 inputoutput 通道。
    • 启动一个 square 函数的 goroutine
    • numbers 中的每个数发送到 input 通道,发送完毕后关闭 input 通道。
    • 使用 for... range 循环读取 output 通道并打印结果,当 output 通道关闭时,循环结束。