iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang中goroutine顺序输出方式的示例分析
  • 655
分享到

golang中goroutine顺序输出方式的示例分析

2023-06-14 22:06:20 655人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关golang中Goroutine顺序输出方式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。golang适合做什么golang可以做服务器端开发,但golang很适合做

这篇文章将为大家详细讲解有关golangGoroutine顺序输出方式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

golang适合做什么

golang可以做服务器开发,但golang很适合做日志处理、数据打包、虚拟机处理、数据库代理等工作。在网络编程方面,它还广泛应用于WEB应用、api应用等领域。

range字符串,使用goroutine打印

因为goroutine随机执行

for _, v := range str {        go func() {            fmt.Println(string(v))        }()}

输出:

5

5

5

5

5

可以使用chan顺序输出

for  _, c := range str{        ch := make(chan rune)        go func(ch <-chan rune) {            key := <-ch            fmt.Println(string(key))        }(ch)        ch <- c    }

输出:

1

2

3

4

5

补充:golang goroutine顺序循环打印ABC

分别使用sync.WaitGroup和context

使用sync.WaitGroup, 可控制循环次数

package mainimport ("fmt""sync")//控制循环次数var count = 5func main() {wg := sync.WaitGroup{}chanA := make(chan struct{}, 1)chanB := make(chan struct{}, 1)chanC := make(chan struct{}, 1)chanA <- struct{}{}wg.Add(3)go printA(&wg, chanA, chanB)go printB(&wg, chanB, chanC)go printC(&wg, chanC, chanA)wg.Wait()}func printA(wg *sync.WaitGroup, chanA, chanB chan struct{}) {defer wg.Done()for i := 0; i < count; i++ {<-chanAfmt.Println("A")chanB <- struct{}{}}}func printB(wg *sync.WaitGroup, chanB, chanC chan struct{}) {defer wg.Done()for i := 0; i < count; i++ {<-chanBfmt.Println("B")chanC <- struct{}{}}}func printC(wg *sync.WaitGroup, chanC, chanA chan struct{}) {defer wg.Done()for i := 0; i < count; i++ {<-chanCfmt.Println("C")chanA <- struct{}{}}}

使用context.WithCancel,通过time.Sleep控制打印数量

package mainimport ("context""fmt""time")func main() {chanA := make(chan struct{}, 1)chanB := make(chan struct{}, 1)chanC := make(chan struct{}, 1)chanA <- struct{}{}ctx1, cancel1 := context.WithCancel(context.Background())ctx2, cancel2 := context.WithCancel(context.Background())ctx3, cancel3 := context.WithCancel(context.Background())go printA(ctx1, chanA, chanB)go printB(ctx2, chanB, chanC)go printC(ctx3, chanC, chanA)time.Sleep(100 * time.Microsecond)cancel1()cancel2()cancel3()}func printA(ctx context.Context, chanA, chanB chan struct{}) {for {select {case <-ctx.Done():fmt.Println("cancel by parent") // 不会输出returncase <-chanA:fmt.Println("A")chanB <- struct{}{}}}}func printB(ctx context.Context, chanB, chanC chan struct{}) {for {select {case <-ctx.Done():fmt.Println("cancel by parent") // 不会输出returncase <-chanB:fmt.Println("B")chanC <- struct{}{}}}}func printC(ctx context.Context, chanC, chanA chan struct{}) {for {select {case <-ctx.Done():fmt.Println("cancel by parent") // 不会输出returncase <-chanC:fmt.Println("C")chanA <- struct{}{}}}}

关于“golang中goroutine顺序输出方式的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: golang中goroutine顺序输出方式的示例分析

本文链接: https://www.lsjlt.com/news/275451.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang中goroutine顺序输出方式的示例分析
    这篇文章将为大家详细讲解有关golang中goroutine顺序输出方式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。golang适合做什么golang可以做服务器端开发,但golang很适合做...
    99+
    2023-06-14
  • golang goroutine顺序输出方式
    range字符串,使用goroutine打印 因为goroutine随机执行 for _, v := range str { go func() { ...
    99+
    2024-04-02
  • C#中顺序表的示例分析
    这篇文章主要为大家展示了“C#中顺序表的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中顺序表的示例分析”这篇文章吧。首先来看看看C#数据结构与算法之顺序表的概念:C#数据结构与算法...
    99+
    2023-06-18
  • Springboot异常日志输出方式的示例分析
    小编给大家分享一下Springboot异常日志输出方式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!lombok插件使用引入依赖,在项目中使用Lombok可以减少很多重复代码的书写。比如说getter/sette...
    99+
    2023-06-22
  • Java顺序表的示例分析
    这篇文章主要介绍Java顺序表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一 、前言顺序表常用的一种,学习并了解显得十分重要,顺序表为以后的学习打下了基石。二、顺序的定义顺序表示在计算机内存中以数组的形式...
    99+
    2023-06-25
  • Vue中加载顺序的示例分析
    这篇文章将为大家详细讲解有关Vue中加载顺序的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在Vuejs 1.0版本中,如果父子组件进行配合,它们的生命周期执行具...
    99+
    2024-04-02
  • MySQL中SELECT执行顺序的示例分析
    小编给大家分享一下MySQL中SELECT执行顺序的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!SELECT语...
    99+
    2024-04-02
  • js中解析顺序、作用域、严格模式的示例分析
    小编给大家分享一下js中解析顺序、作用域、严格模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、javascrip...
    99+
    2024-04-02
  • Java中输入输出方式的简单示例
    目录概述 一、输出到控制台(一)、基本语法(二)、代码示例(三)、格式化字符串二、从键盘输入1、使用 Scanner 读取字符串/整数/浮点数2、输入数据类型的方法3、注意事项:总结...
    99+
    2024-04-02
  • Java中输入/输出流体系的示例分析
    这篇文章主要介绍Java中输入/输出流体系的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java输入/输出流体系1.字节流和字符流字节流:按字节读取。字符流:按字符读取。字符流读取方便,字节流功能强大,当不...
    99+
    2023-05-30
    java
  • C++输入和输出流的示例分析
    这篇文章给大家分享的是有关C++输入和输出流的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。输入和输出流从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。从磁盘文件输入数据...
    99+
    2023-06-29
  • Java IO中字节输入输出流的示例分析
    这篇文章主要介绍Java IO中字节输入输出流的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!讲的是字节输入输出流:InputStream、OutputSteam(下图红色长方形框内),红色椭圆框内...
    99+
    2023-06-26
  • Shell中管道及执行顺序的示例分析
    这篇文章主要介绍Shell中管道及执行顺序的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、基本概念 a、I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9; b、常用FD有3个,为0(...
    99+
    2023-06-09
  • css样式优先级及层叠顺序排序的示例分析
    这篇文章主要介绍css样式优先级及层叠顺序排序的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一般情况下: [1位重要标志位] > [4位特殊性标志] > 声明先后顺序 !important &g...
    99+
    2023-06-08
  • javascript对象遍历顺序的示例分析
    这篇文章给大家分享的是有关javascript对象遍历顺序的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScr...
    99+
    2023-06-14
  • shell命令中定向输出的示例分析
    这篇文章给大家分享的是有关shell命令中定向输出的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mycommand >mylog.txt 2>&1 应该是最经典的用法了。命令的结果可...
    99+
    2023-06-09
  • shell中printf命令格式化输出语句的示例分析
    小编给大家分享一下shell中printf命令格式化输出语句的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简介printf 命令用于格式化输出, 是ec...
    99+
    2023-06-09
  • C语言线性表中顺序表的示例分析
    小编给大家分享一下C语言线性表中顺序表的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、本章重点线性表和顺序表的概念动态和静态顺序表接口实现在线0j训练...
    99+
    2023-06-29
  • Linux中shell脚本输出日志的示例分析
    这篇文章给大家分享的是有关Linux中shell脚本输出日志的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、日志方法简介:#日志名称log="./upgrade.log" ...
    99+
    2023-06-09
  • CSS书写规范和顺序的的示例分析
    这篇文章将为大家详细讲解有关CSS书写规范和顺序的的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。CSS书写顺序 1.位置属性(position, to...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作