面试题答案
一键面试在Go语言中,当一个通道被关闭后,对其进行读取操作会有以下情况:
- 如果通道中仍有数据,读取操作会正常返回通道中的数据,不会阻塞。
- 当通道中没有数据时,读取操作会立即返回,返回通道类型的零值和一个布尔值
ok
,ok
为false
表示通道已关闭且无数据可读。
以下是代码示例:
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
go func() {
ch <- 10
close(ch)
}()
// 第一次读取,通道中有数据
data1, ok1 := <-ch
fmt.Printf("第一次读取: data = %d, ok = %v\n", data1, ok1)
// 第二次读取,通道中无数据但已关闭
data2, ok2 := <-ch
fmt.Printf("第二次读取: data = %d, ok = %v\n", data2, ok2)
}
在上述代码中:
- 第一次读取
data1, ok1 := <-ch
,由于通道中存在数据10
,所以data1
为10
,ok1
为true
。 - 第二次读取
data2, ok2 := <-ch
,此时通道已关闭且无数据,所以data2
为int
类型的零值0
,ok2
为false
。这表明通道已关闭且没有数据可供读取。