面试题答案
一键面试package main
import (
"fmt"
)
func squareStream(intStream <-chan int, resultStream chan<- int) {
for num := range intStream {
resultStream <- num * num
}
close(resultStream)
}
你可以这样调用这个函数:
func main() {
intStream := make(chan int)
resultStream := make(chan int)
go squareStream(intStream, resultStream)
// 模拟传入整数流
go func() {
intStream <- 2
intStream <- 3
intStream <- 4
close(intStream)
}()
for result := range resultStream {
fmt.Println(result)
}
}
在上述代码中:
squareStream
函数接受一个只读通道intStream
用于接收整数流,以及一个只写通道resultStream
用于输出计算后的平方值。- 在
squareStream
函数内部,通过for... range
循环从intStream
通道接收整数,计算平方值并发送到resultStream
通道。当intStream
通道关闭时,循环结束,并关闭resultStream
通道。 - 在
main
函数中,创建了intStream
和resultStream
两个通道,并启动一个 goroutine 来执行squareStream
函数。 - 另外启动一个 goroutine 模拟向
intStream
通道传入整数流,并在完成后关闭intStream
通道。 - 在
main
函数的最后,通过for... range
循环从resultStream
通道接收并打印计算结果,直到resultStream
通道关闭。