面试题答案
一键面试在Go语言中,当一个通道被关闭后,对其进行读取操作有以下规律:
- 如果通道中仍有数据:读取操作会正常返回通道中的数据,直到数据读完。
- 通道中无数据且已关闭:读取操作会立即返回通道类型的零值和
false
。
示例代码如下:
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
go func() {
ch <- 1
ch <- 2
close(ch)
}()
for {
data, ok := <-ch
if!ok {
break
}
fmt.Println("Received:", data)
}
fmt.Println("Channel is closed")
}
在上述代码中,ch
通道先发送两个数据然后关闭。主函数在循环中读取通道数据,当ok
为false
时,表示通道已关闭且无数据,此时退出循环。
所以,关闭通道后读取,先读取剩余数据,无数据时返回零值和false
。