面试题答案
一键面试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)
}
通道在这里起到了两个关键作用:
- 同步:Goroutine 是并发执行的,通过通道可以确保主 Goroutine 在接收到所有子 Goroutine 发送的字符串之前不会结束。每个子 Goroutine 在发送字符串到通道后会阻塞,直到主 Goroutine 从通道接收数据,这样就实现了不同 Goroutine 之间的同步。
- 通信:通道为不同 Goroutine 之间提供了一种安全的数据传递方式。子 Goroutine 可以将字符串发送到通道,主 Goroutine 可以从通道接收这些字符串,实现了 Goroutine 间的数据共享和交互。