MST

星途 面试题库

面试题:Go通道关闭后读取的基础问题

在Go语言中,当一个通道关闭后,继续从该通道读取数据会返回什么值?请举例说明如何通过代码判断通道已关闭且读取到了最后的数据。
27.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 通道关闭后继续读取数据的返回值
    • 当从一个已关闭的通道读取数据时,如果通道中仍有未读取的数据,会正常返回这些数据。当通道中没有数据时,会立即返回该通道元素类型的零值,并且第二个返回值(一个布尔值)为false,表示通道已关闭且没有更多数据可读。
  2. 代码示例
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判断通道是否关闭,如果okfalse,则说明通道已关闭且读取到了最后的数据,此时退出循环。