MST

星途 面试题库

面试题:Go中Goroutine与通道在简单异步任务中的应用

请编写一个Go程序,创建3个Goroutine,每个Goroutine向一个通道发送一个字符串(例如"Goroutine 1","Goroutine 2","Goroutine 3"),然后在主Goroutine中从该通道接收并打印这些字符串。阐述一下通道在这里起到了什么作用。
26.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func main() {
    ch := make(chan string)

    go func() {
        ch <- "Goroutine 1"
    }()

    go func() {
        ch <- "Goroutine 2"
    }()

    go func() {
        ch <- "Goroutine 3"
    }()

    for i := 0; i < 3; i++ {
        fmt.Println(<-ch)
    }
    close(ch)
}

通道在这里起到了两个关键作用:

  1. 同步:Goroutine 是并发执行的,通过通道可以确保主 Goroutine 在接收到所有子 Goroutine 发送的字符串之前不会结束。每个子 Goroutine 在发送字符串到通道后会阻塞,直到主 Goroutine 从通道接收数据,这样就实现了不同 Goroutine 之间的同步。
  2. 通信:通道为不同 Goroutine 之间提供了一种安全的数据传递方式。子 Goroutine 可以将字符串发送到通道,主 Goroutine 可以从通道接收这些字符串,实现了 Goroutine 间的数据共享和交互。