Go语言程序创建单向发送通道,并将其传递给接受整数切片指针的函数


在使用Go语言通道的过程中,有很多情况下需要编写一个程序,该程序创建一个单向发送通道,并将其传递给一个接受整数切片指针的函数,以进行数据流传输、异步数据共享等。在本Go语言文章中,我们将使用make()函数以及通道类型编写这样的程序。

语法

 ch := make(chan<- string)

声明一个名为“ch”的只发送通道。

go sendOnlyChannel(ch, &wg) 

我们使用“go”关键字启动一个新的goroutine。这里的go关键字正在执行SendOnlyChannel()函数。

var wg sync.WaitGroup

Sync.WaitGroup被定义为一个变量,用于同步goroutine。

算法

  • 定义sendData函数,该函数接受类型为chan int的单向发送通道ch和整数切片data作为参数。

  • 遍历data切片中的每个值val:向通道“ch”发送值val。

  • 关闭通道“ch”以指示不再发送其他值。

  • 确定主函数。创建一个包含值1、2、3、4、5的整数数据切片。

  • 使用make()方法创建一个名为“ch”的类型为“chan int”的双向通道。

  • 调用sendData方法,传入通道ch和数据切片作为参数,以启动一个goroutine。

  • 进入循环以接收通过通道发送的值。打印“val”。

示例1

下面给出的代码创建一个通道,并启动一个单独的goroutine将切片中的值发送到通道,另一个goroutine打印该值。此代码是Go语言中通道之间并发通信的一个示例。

package main
import "fmt"
func sendData(ch chan<- int, data []int) {
   for _, val := range data {
      ch <- val
   }
   close(ch)
}
func main() {
   data := []int{1, 2, 3, 4, 5}
   ch := make(chan int)
   go sendData(ch, data)
   for val := range ch {
      fmt.Println(val)
   }
}

输出

1
2
3
4
5

示例2

此代码是Go语言中通道之间并发通信的一个示例。此代码引入了done通道,done通道用作完成信号,它允许主goroutine在发送通道完成执行之前等待。

package main
import (
   "fmt"
)
func sendData(ch chan<- int, data *[]int, done chan<- bool) {
   for _, val := range *data {
      ch <- val
}
close(ch)
done <- true
}
func main() {
   data := []int{1, 2, 3, 4, 5}
   ch := make(chan int)
   done := make(chan bool)
   go sendData(ch, &data, done)
   for val := range ch {
      fmt.Println(val)
   }
   // Waiting to receive a value indicating completion
   <-done
}

输出

1
2
3
4
5

结论

在本文中,我们研究了两种在Go语言中构造单向发送通道并将其传递给接受整数切片指针的函数的方法。第一种方法使用了make()函数,而第二种方法使用了箭头表示法。make函数正确地分配和初始化内存,而箭头表示法则能够实现goroutine之间的快速通信。

更新于:2023年7月13日

78 次查看

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.