面试题答案
一键面试- 继续从关闭通道读取数据的现象:
- 当从一个已关闭的通道读取数据时,如果通道中仍有未读取的数据,会正常读取这些数据。
- 当通道中没有数据且已关闭时,读取操作会立即返回,返回值为通道类型的零值,并且第二个返回值(ok)为
false
。
- 代码示例:
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
go func() {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch)
}()
for {
data, ok := <-ch
if!ok {
break
}
fmt.Println("Received:", data)
}
fmt.Println("Channel is closed, all data read.")
}
上述代码中,在一个匿名函数中向通道 ch
发送一些数据后关闭通道。主函数通过 for { }
循环和 ok
检查来安全地读取通道关闭后剩余的数据。当 ok
为 false
时,说明通道已关闭且无数据可读,从而退出循环。