MST

星途 面试题库

面试题:Go语言中Go Channel的基本创建与单向通道

请说明在Go语言中如何创建一个普通的channel以及一个单向的发送通道。并且举例说明在一个简单的生产者 - 消费者模型中,单向发送通道是如何使用的,假设生产者向通道发送整数,消费者从通道接收整数并打印。
40.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 创建普通 channel: 在 Go 语言中,使用 make 函数来创建普通 channel。语法如下:
ch := make(chan int)

这里创建了一个类型为 int 的普通 channel ch,普通 channel 既可以发送数据也可以接收数据。

  1. 创建单向发送通道: 同样使用 make 函数,不过需要在类型中指定方向为发送。语法如下:
sendCh := make(chan<- int)

这里创建了一个只能发送 int 类型数据的单向发送通道 sendCh

  1. 生产者 - 消费者模型中单向发送通道的使用示例
package main

import (
    "fmt"
)

func producer(sendCh chan<- int) {
    for i := 0; i < 5; i++ {
        sendCh <- i
    }
    close(sendCh)
}

func consumer(receiveCh <-chan int) {
    for num := range receiveCh {
        fmt.Println("Received:", num)
    }
}

func main() {
    sendCh := make(chan<- int)
    go producer(sendCh)

    receiveCh := make(<-chan int, 5)
    go func() {
        for num := range sendCh {
            receiveCh <- num
        }
        close(receiveCh)
    }()

    consumer(receiveCh)
}

在上述代码中:

  • producer 函数作为生产者,向单向发送通道 sendCh 发送整数,发送完成后关闭通道。
  • consumer 函数作为消费者,通过 for... range 循环从单向接收通道 receiveCh 接收数据并打印。
  • main 函数中,先创建单向发送通道 sendCh 并启动生产者 goroutine。然后创建单向接收通道 receiveCh,并通过一个匿名 goroutine 将 sendCh 中的数据转发到 receiveCh 中,转发完成后关闭 receiveCh。最后启动消费者 goroutine 消费数据。