面试题答案
一键面试当一个通道被关闭后,继续从该通道读取数据,会读取到通道类型的零值,且第二个返回值为 false
,表示通道已关闭。
以下是代码示例:
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
go func() {
ch <- 10
close(ch)
}()
// 第一次读取
data, ok := <-ch
if ok {
fmt.Printf("第一次读取:数据 %d,通道未关闭\n", data)
} else {
fmt.Println("第一次读取:通道已关闭")
}
// 第二次读取
data, ok = <-ch
if ok {
fmt.Printf("第二次读取:数据 %d,通道未关闭\n", data)
} else {
fmt.Println("第二次读取:通道已关闭")
}
}
上述代码中,先向通道 ch
发送一个值并关闭通道。之后进行两次读取操作,第一次读取能获取到发送的值,第二次读取则获取到通道类型 int
的零值 0
且 ok
为 false
表示通道已关闭。