面试题答案
一键面试在Go语言中,可以通过在make
函数中传入第二个参数来创建一个带缓冲的Channel。当发送方不再向Channel发送数据时,应该关闭Channel,这样接收方可以通过ok
值判断是否还有数据可读。
示例代码如下:
package main
import (
"fmt"
)
func main() {
// 创建一个带缓冲的Channel,缓冲大小为2
ch := make(chan int, 2)
go func() {
// 向Channel发送数据
ch <- 1
ch <- 2
// 发送完成后关闭Channel
close(ch)
}()
// 接收Channel中的数据
for val := range ch {
fmt.Println(val)
}
}
在上述代码中,在发送完所有数据后调用close(ch)
关闭Channel。原因是:
- 避免资源泄漏:如果不关闭Channel,接收方可能会一直阻塞等待数据,造成资源浪费。
- 通知接收方:关闭Channel可以通知接收方不会再有新的数据到来,例如
for... range
循环会在Channel关闭时自动结束,避免接收方无效等待。