Go 编程中的带缓冲通道

GolangGolangBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验旨在测试你对 Go 语言中带缓冲通道的理解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ConcurrencyGroup(["Concurrency"]) go/ConcurrencyGroup -.-> go/channels("Channels") subgraph Lab Skills go/channels -.-> lab-15456{{"Go 编程中的带缓冲通道"}} end

通道缓冲

默认情况下,Go语言中的通道是无缓冲的,这意味着只有在有相应的接收方准备好接收发送的值时,它们才会接受发送操作。然而,带缓冲的通道可以在没有相应接收方的情况下接受有限数量的值。在本实验中,你需要创建一个带缓冲的通道,并在没有相应并发接收操作的情况下向通道发送值。

  • 具备Go语言通道的基础知识
  • 理解带缓冲的通道
$ go run channel-buffering.go
带缓冲的
通道

以下是完整代码:

// 默认情况下,通道是_无缓冲的_,这意味着只有在有相应的接收方(`<- chan`)准备好接收发送的值时,它们才会接受发送操作(`chan <-`)。_带缓冲的通道_可以在没有相应接收方的情况下接受有限数量的值。

package main

import "fmt"

func main() {

	// 这里我们`make`一个字符串类型的通道,最多缓冲2个值。
	messages := make(chan string, 2)

	// 因为这个通道是带缓冲的,所以我们可以在没有相应并发接收操作的情况下将这些值发送到通道中。
	messages <- "带缓冲的"
	messages <- "通道"

	// 之后我们可以像往常一样接收这两个值。
	fmt.Println(<-messages)
	fmt.Println(<-messages)
}

总结

在本实验中,你已经学会了如何在Go语言中创建一个带缓冲的通道,并在没有相应并发接收操作的情况下向通道发送值。这在你想要向通道发送值而不阻塞发送方的场景中非常有用。