MST

星途 面试题库

面试题:Go中如何创建一个带缓冲的Channel并关闭它

在Go语言中,描述如何创建一个带缓冲的Channel,并且在合适的时机关闭它。请写出示例代码,并解释为什么要在那个时机关闭Channel。
29.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,可以通过在make函数中传入第二个参数来创建一个带缓冲的Channel。当发送方不再向Channel发送数据时,应该关闭Channel,这样接收方可以通过ok值判断是否还有数据可读。

示例代码如下:

package main

import (
    "fmt"
)

func main() {
    // 创建一个带缓冲的Channel,缓冲大小为2
    ch := make(chan int, 2)

    go func() {
        // 向Channel发送数据
        ch <- 1
        ch <- 2
        // 发送完成后关闭Channel
        close(ch)
    }()

    // 接收Channel中的数据
    for val := range ch {
        fmt.Println(val)
    }
}

在上述代码中,在发送完所有数据后调用close(ch)关闭Channel。原因是:

  1. 避免资源泄漏:如果不关闭Channel,接收方可能会一直阻塞等待数据,造成资源浪费。
  2. 通知接收方:关闭Channel可以通知接收方不会再有新的数据到来,例如for... range循环会在Channel关闭时自动结束,避免接收方无效等待。