面试题答案
一键面试- 通道关闭后继续读取数据的返回值:
- 当从一个已关闭的通道读取数据时,如果通道中仍有未读取的数据,会正常返回这些数据。当通道中没有数据时,会立即返回该通道元素类型的零值,并且第二个返回值(一个布尔值)为
false
,表示通道已关闭且没有更多数据可读。
- 当从一个已关闭的通道读取数据时,如果通道中仍有未读取的数据,会正常返回这些数据。当通道中没有数据时,会立即返回该通道元素类型的零值,并且第二个返回值(一个布尔值)为
- 代码示例:
package main
import (
"fmt"
)
func main() {
ch := make(chan int)
go func() {
for i := 0; i < 3; i++ {
ch <- i
}
close(ch)
}()
for {
data, ok := <-ch
if!ok {
fmt.Println("通道已关闭且读取到了最后的数据")
break
}
fmt.Println("读取到数据:", data)
}
}
在上述代码中,首先创建了一个通道ch
,在一个goroutine中向通道发送3个数据后关闭通道。在主goroutine中通过for{}
循环从通道读取数据,每次读取时通过第二个返回值ok
判断通道是否关闭,如果ok
为false
,则说明通道已关闭且读取到了最后的数据,此时退出循环。