Golang 使用单向通道将整数1到10发送到接收函数

Golang 使用单向通道将整数1到10发送到接收函数

在这篇Go语言文章中,我们将使用单向通道将整数1到10发送到接收通道。我们将使用基本通道、具有固定容量的缓冲通道,以及使用选择语句进行非阻塞通道操作。

语法

ch := make (chan int)

创建一个非缓冲通道

Value := <-ch

伪代码

从通道接收值

select {
case ch <- value:
   // Code to execute when sending to the channel is possible
default:
   // Code to execute when sending to the channel is not possible (channel full)
}

使用select语句进行非阻塞通道操作。

步骤:

  • 创建一个int通道,用于发送和接收sender和receiver协程之间的通信。
  • 创建名为“sendNumbers”的函数,使用参数将数字从1到10发送到通道(ch)。
  • 使用循环从1到10进行迭代。在循环内使用<-运算符将每个整数发送到通道中。
  • 创建名为“receiveNumbers”的函数,接受参数ch,并从通道接收和输出整数。
  • 使用循环和range关键字在通道关闭之前对其进行迭代。
  • 在循环内部,从通道中获取每个整数并打印它。
  • 在main函数中:
    • 创建一个缓冲容量为5的int类型通道。
    • 启动实现“sendNumbers”函数的goroutine,并将通道作为参数传递。
    • 在调用“receiveNumbers”方法时使用通道作为参数。
  • transmitter协程将在程序运行时将整数发送到通道,而receiver协程将并发地接收和输出这些整数。

示例1:使用基本通道通信

此示例设置了一个基本通道,并逐个将整数发送到接收函数。发送goroutine将整数从1到10发送到通道,接收goroutine接收并打印它们。

package main

import "fmt"

func sendNumbers(ch chan<- int) {
   for i := 1; i <= 10; i++ {
      ch <- i
   }
   close(ch)
}

func receiveNumbers(ch <-chan int) {
   for num := range ch {
      fmt.Println(num)
   }
}

func main() {
   ch := make(chan int)
   go sendNumbers(ch)
   receiveNumbers(ch)
}

输出

1
2
3
4
5
6
7
8
9
10

示例2:使用具有固定容量的缓冲通道

这个示例涉及设置具有固定容量的缓冲通道,并在接收函数开始处理它们之前一次发送多个整数。我们定义的通道容量为5,这意味着发送者可以发送5个整数而不会阻塞。

package main

import "fmt"

func sendNumbers(ch chan<- int) {
   for i := 1; i <= 10; i++ {
      ch <- i
   }
   close(ch)
}

func receiveNumbers(ch <-chan int) {
   for num := range ch {
      fmt.Println(num)
   }
}

func main() {
   ch := make(chan int, 5) 
   go sendNumbers(ch)
   receiveNumbers(ch)
}

输出

1
2
3
4
5
6
7
8
9
10

示例3:使用选择语句进行非阻塞通道操作

该方法利用一个选择语句和一个容量范围为3的缓冲通道来处理操作。

package main

import (
   "fmt"
   "time"
)

func sendNumbers(ch chan<- int) {
   for i := 1; i <= 10; i++ {
      select {
      case ch <- i:
         fmt.Println("Sent:", i)
      default:
         fmt.Println("Channel is full!")
      }
      time.Sleep(time.Millisecond * 700) // Pause for demonstration purposes
   }
   close(ch)
}

func receiveNumbers(ch <-chan int) {
   for num := range ch {
      fmt.Println("Received:", num)
      time.Sleep(time.Millisecond * 500) // Pause for demonstration purposes
   }
}

func main() {
   ch := make(chan int, 3)
   go sendNumbers(ch)
   receiveNumbers(ch)
}

输出

Sent: 1 
Received: 1 
Sent: 2 
Received: 2 
Sent: 3 
Received: 3 
Sent: 4 
Received: 4 
Sent: 5 
Received: 5 
Sent: 6 
Received: 6 
Sent: 7 
Received: 7 
Sent: 8 
Received: 8 
Sent: 9 
Received: 9 
Sent: 10 
Received: 10

结论

在本文中,我们讨论了三种不同的方法来通过单向通道将范围从1到10的整数传递给接收函数。使用这些方法,您可以利用Go语言并发编程模型的强大、可扩展的特性来创建强大的应用程序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程