面试题答案
一键面试- 创建普通 channel:
在 Go 语言中,使用
make
函数来创建普通 channel。语法如下:
ch := make(chan int)
这里创建了一个类型为 int
的普通 channel ch
,普通 channel 既可以发送数据也可以接收数据。
- 创建单向发送通道:
同样使用
make
函数,不过需要在类型中指定方向为发送。语法如下:
sendCh := make(chan<- int)
这里创建了一个只能发送 int
类型数据的单向发送通道 sendCh
。
- 生产者 - 消费者模型中单向发送通道的使用示例:
package main
import (
"fmt"
)
func producer(sendCh chan<- int) {
for i := 0; i < 5; i++ {
sendCh <- i
}
close(sendCh)
}
func consumer(receiveCh <-chan int) {
for num := range receiveCh {
fmt.Println("Received:", num)
}
}
func main() {
sendCh := make(chan<- int)
go producer(sendCh)
receiveCh := make(<-chan int, 5)
go func() {
for num := range sendCh {
receiveCh <- num
}
close(receiveCh)
}()
consumer(receiveCh)
}
在上述代码中:
producer
函数作为生产者,向单向发送通道sendCh
发送整数,发送完成后关闭通道。consumer
函数作为消费者,通过for... range
循环从单向接收通道receiveCh
接收数据并打印。- 在
main
函数中,先创建单向发送通道sendCh
并启动生产者 goroutine。然后创建单向接收通道receiveCh
,并通过一个匿名 goroutine 将sendCh
中的数据转发到receiveCh
中,转发完成后关闭receiveCh
。最后启动消费者 goroutine 消费数据。