golang 两个go程轮流打印一个切片的实现

 更新时间:2020年10月21日 10:54:47   作者:李培冠  
这篇文章主要介绍了golang 两个go程轮流打印一个切片的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

问题描述:

两个 go 程轮流打印一个切片。

Golang 实现:

使用两个 channel,只用来判断

package main

import (
 "fmt"
 "sync"
)

// 两个 go 程轮流打印一个切片
func main() {
 ch1 := make(chan bool, 1)
 ch2 := make(chan bool, 1)
 ch1 <- true
 nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
 var i int
 var wg sync.WaitGroup
 wg.Add(2)
 go func() {
 for ; i < len(nums) && <-ch1; i++ {
  fmt.Println(nums[i])
  ch2 <- true
 }
 wg.Done()
 }()
 go func() {
 for ; <-ch2 && i < len(nums); i++ {
  fmt.Println(nums[i])
  ch1 <- true
 }
 wg.Done()
 }()
 wg.Wait()
}

注意

要理清两个子 go 程的判断条件,要注意是先判断 i 的大小还是先判断管道是否有值。

稍有不慎就会发生死锁哦。

使用两个 channel,用来传值

package main

import (
 "fmt"
 "sync"
)

// 两个 go 程轮流打印一个切片
func main() {
 ch1 := make(chan int, 1)
 ch2 := make(chan int, 1)
 nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
 ch1 <- nums[0]
 i := 1
 numsLen := len(nums)
 var wg sync.WaitGroup
 wg.Add(2)
 go func() {
 for ; i < numsLen; i++ {
  val := <-ch1
  fmt.Println(val)
  ch2 <- i+1
 }
 wg.Done()
 }()
 go func() {
 for ; i < numsLen; i++ {
  val := <- ch2
  fmt.Println(val)
  ch1 <- i+1
 }
 wg.Done()
 }()
 wg.Wait()
}

 到此这篇关于golang 两个go程轮流打印一个切片的实现的文章就介绍到这了,更多相关golang go程轮流打印一个切片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言与其他语言进行交互的方式详解

    Go语言与其他语言进行交互的方式详解

    在当今的软件开发领域,多种编程语言常常需要协同工作,以充分利用各自的优势来构建复杂的应用系统,Go 语言作为一门高效、简洁的编程语言,也经常需要与其他语言进行交互,接下来,我们将详细探讨 Go 语言如何与其他语言进行交互,需要的朋友可以参考下
    2024-06-06
  • 十个示例带你深入了解Go语言中的接口

    十个示例带你深入了解Go语言中的接口

    这篇文章主要是通过十个简单的示例带大家深入了解一下Go语言中接口的使用,文中的示例代码简洁易懂,具有一定的学习价值,需要的可以了解一下
    2023-02-02
  • golang中sync.Once只执行一次的原理解析

    golang中sync.Once只执行一次的原理解析

    在某些场景下,我们希望某个操作或者函数仅被执行一次,比如单例模式的初始化,一些资源配置的加载等,golang中的sync.Once就实现了这个功能,本文就和大家一起解析sync.Once只执行一次的原理,需要的朋友可以参考下
    2023-09-09
  • Golang实现EasyCache缓存库实例探究

    Golang实现EasyCache缓存库实例探究

    这篇文章主要为大家介绍了Golang实现EasyCache缓存库实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go语言服务器开发之客户端向服务器发送数据并接收返回数据的方法

    Go语言服务器开发之客户端向服务器发送数据并接收返回数据的方法

    这篇文章主要介绍了Go语言服务器开发之客户端向服务器发送数据并接收返回数据的方法,实例分析了客户端的开发技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 解决golang gin框架跨域及注解的问题

    解决golang gin框架跨域及注解的问题

    这篇文章主要介绍了解决golang gin框架跨域及注解的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Go 代码块作用域变量遮蔽问题解析

    Go 代码块作用域变量遮蔽问题解析

    这篇文章主要为大家介绍了Go 代码块作用域变量遮蔽问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 重学Go语言之如何使用Modules

    重学Go语言之如何使用Modules

    Go语言在Go.1.11版本发布了Go Modules,这是一种新的Go项目依赖管理解决方案,可以让Go项目的依赖包关系更加清晰,也更容易管理,下面就来看看Modules是如何使用的吧
    2023-07-07
  • GoAdminGroup/go-admin的安装和运行的教程详解

    GoAdminGroup/go-admin的安装和运行的教程详解

    这篇文章主要介绍了GoAdminGroup/go-admin的安装和运行的教程详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • golang 接口嵌套实现复用的操作

    golang 接口嵌套实现复用的操作

    这篇文章主要介绍了golang 接口嵌套实现复用的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论