Golang 创建大小为5的缓冲通道,并使用循环向通道发送10个整数

Golang 创建大小为5的缓冲通道,并使用循环向通道发送10个整数

本文章将重点介绍如何创建一个大小为5的缓冲通道,并使用循环向通道发送10个整数。程序说明了如何创建和使用缓冲通道来发送大型值。我们将使用两种不同的方法:通过循环向通道发送整数,以及创建一个带有示例的缓冲通道来阐述概念。

语法

ch := make(chan int, bufferSize)

语法 ch := make(chan int, bufferSize) 创建一个具有指定缓冲大小的 int 类型的带缓冲通道 ch,允许发送者在缓冲区满之前发送多个值而不会被阻塞。

sync.waitgroup()

WaitGroup结构类型提供了协调执行多个goroutine的方法。它允许您向等待组中添加goroutine,然后在所有goroutine完成之前等待它们,然后再继续执行程序。

wg.done()

函数wg.Done()减少了WaitGroup的数量,表示相关的goroutine已经完成了任务。这是为了保证WaitGroup在允许程序继续执行之前等待所有的goroutine完成。

步骤

  • 使用make函数创建一个大小为5的整数缓冲通道 – ch := make(chan int, 5)。

  • 启动一个循环,迭代10次,将整数发送到通道中。

  • 在循环内部,使用通道的<-运算符将每个整数发送到通道中:ch <- value,其中value是当前的整数。

  • 在发送完所有的10个整数后,关闭通道以表示不会再发送更多的值:close(ch)。

  • 实现一个独立的goroutine来从通道中接收值。可以使用for循环和通道的range关键字来完成:for num := range ch { //处理num }。

  • 在接收goroutine内部,按需要处理每个接收到的整数。

  • 可选地,添加必要的同步机制,如WaitGroup,以确保程序等待所有goroutine完成。

示例1

在此代码中,我们使用make(chan int, 5)创建了一个大小为5的缓冲通道ch。然后,我们使用循环将10个整数发送到通道中。最后,我们关闭通道并使用range循环从通道中读取值,打印每个值。

package main

import (
   "fmt"
   "sync"
)

func main() {
   ch := make(chan int, 5)

   var wg sync.WaitGroup

   wg.Add(1)

   go func() {
      defer wg.Done()

      // Reading and printing the values from the channel
      for value := range ch {
         fmt.Println(value)
      }
   }()

   for i := 0; i < 10; i++ {
      ch <- i
   }

   close(ch)

   wg.Wait()
}

输出

0
1
2
3
4
5
6
7
8
9

示例2

在这段代码中,我们创建了一个大小为5的缓冲通道ch。然后,我们使用循环使用通道发送操作符<-将10个整数发送到通道中。在发送所有值之后,我们使用close函数关闭通道,表示不再发送更多的值。最后,我们使用for循环遍历通道,并使用range表达式逐一从通道接收值。接收到的值然后使用fmt.Println函数打印出来。

package main

import (
   "fmt"
   "sync"
)

func main() {
   ch := make(chan int, 5)

   var wg sync.WaitGroup

   wg.Add(1)
   go func() {
      defer wg.Done()
      for i := 0; i < 10; i++ {
         ch <- i
      }
      close(ch)
   }()

   wg.Add(1)
   go func() {
      defer wg.Done()
      for value := range ch {
         fmt.Println(value)
      }
   }()

   wg.Wait()
}

输出

0
1
2
3
4
5
6
7
8
9

结论

在这个Golang程序中,我们有效地使用了一个大小为5的缓冲通道,并使用循环发送了10个整数可到通道。缓冲通道允许发送方发送一定数量的值而不阻塞发送方,从而提供了有效处理并发操作的方法。通过遵循这个算法,我们能够在程序中有效使用通道,促进goroutines之间的通信。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程