004 Golang-channel-practice 左右括号匹配

第四题 左右括号打印

一个协程负责打印“(”,一个协程负责打印“)”,左右括号的数量要匹配。在这道题目里,我在main函数里进行了一个死循环。会产生一个随机数,随机数就是接下来要打印的左括号的数量。

例如:((((()))))、(())、()。这样是正确的。一个左括号要匹配一个右括号。数量要对上~

())、((())。一看就左右不平衡,这就是错的!

在这里,我们运用了“空结构体”,这个空结构体是用来“占位置”的。A协程打印了多少个左括号,A协程就要往channel传递多少个空结构体,B协程再根据channel中空结构体的数量,来打印右括号

 

package main
import (
    "fmt"
    "math/rand"
    "sync"
    "time"
)
func producer(c chan struct{}, times int) {
    defer close(c)
    for i := 0; i < times; i++ {
       fmt.Print("(")
       c <- struct{}{}
    }
}
func consumer(c chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    for range c {
       fmt.Print(")")
    }
}
func main() {
    rand.Seed(time.Now().UnixNano())
    for {
       times := rand.Intn(10) + 1
       c := make(chan struct{})
       var wg sync.WaitGroup
       go producer(c, times)
       // 启动多个消费者 goroutine
       for i := 0; i < times; i++ {
          wg.Add(1)
          go consumer(c, &wg)
       }
       wg.Wait()
    }
}

来看看输出!

5a24b2238ceb4f66841111559fd1743b.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/315552.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#编程-了解线程的优先级

了解线程的优先级 控制线程行为的一个属性是它的优先级。.NET运行时环境基于它们的优先级执行线程。CPU一次仅执行一个线程。因此,处于执行的可运行状态的线程,排队等待轮到被处理器执行。线程是固定优先级调度的。带有优先级的每个线程在处理器的线程队列中有自己的位置。 …

Nginx多虚拟主机配置

最近写公司项目&#xff0c;需要和前端小伙伴对接&#xff0c;但是有时候只是后端的一个bug&#xff0c;也不好意思一直让前端小伙伴帮忙起服务&#xff0c;所以想着直接拿测试包在本地起一个前端环境&#xff0c;这样后续开发比较方便&#xff1b;因为公司项目有好几个&#x…

22款奔驰C260L升级ACC自适应巡航 解放双脚 出行更加安全

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f; 如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全…

<软考高项备考>《论文专题 - 63 质量管理(2) 》

2 过程1-规划质量管理 2.1 问题 4W1H过程做什么识别项目及其可交付成果的质量要求、标准&#xff0c;并书面描述项目将如何证明符合质量要求、标准的过程&#xff1b;作用&#xff1a;为在整个项目期间如何管理和核实质量提供指南和方向为什么做1、识别项目/产品质量要求和标…

Github项目推荐-Insomnia

项目地址 GitHub地址&#xff1a;GitHub - Kong/insomnia 官网&#xff1a;The Collaborative API Development Platform - Insomnia 项目简述 想必大家都知道PostMan吧。Insomnia可以说是PostMan的开源平替。页面ui很不错&#xff0c;功能强大&#xff0c;使用也比较方便。…

【ChatGPT-Share,国内可用】GPTS商店大更新:一探前沿科技的魅力!

使用地址&#xff1a;https://hello.zhangsan.cloud/list GPTS商店预览,王炸更新 精选应用&#xff1a; 系统内置应用&#xff1a; 绘画应用&#xff1a; 写作应用&#xff1a; 高效工具应用&#xff1a; 学术搜索和分析应用&#xff1a; 编程应用&#xff1a; 教育应…

开源项目CuteSqlite开发笔记(七):CuteSqlite释放BETA版本啦

经过大半年的开发&#xff0c;CuteSqlite程序代码不知不觉来到了6万行&#xff0c;有效行数4万行&#xff0c;CuteSqlite开发完成了一个小版本&#xff0c;进入下一个阶段&#xff0c;并于2024元旦释放BETA版本&#xff0c;有兴趣的朋友可以下载试用。 GitHub下载https://gith…

基于Docker Compose单机实现多级缓存架构2024

文章目录 一、环境参考二、专栏简介三、扩展 一、环境参考 NameVersionDocker Desktop for Windows4.23.0Openjdk8MySQL8.2.0Redis7.2Canal1.1.7OpenResty1.21.4.3-3-jammy-amd64Lua-Caffeine- 二、专栏简介 多级缓存实现过程比较长&#xff0c;将拆分为多个文章分步讲述。如…

【算法】信使(最短路问题)

题目 战争时期&#xff0c;前线有 n 个哨所&#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息&#xff0c;当然&#xff0c;这是要花费一定时间的&#xff08;以天为单位&#xff09;。 指挥部设在第一个哨所。 当指挥部下达一个命令…

低维度向量的 Householder 反射变换 matlab 图示

1, 算法原理 设th 是一个弧度值&#xff0c; 令 Q | cos(th) sin(th) | | sin(th) -cos(th) | S span{ | cos(th/2.0) | } | sin(th/2.0) | x (x1, x2) 是一个平面上的二维向量 计算 y Qx Qx 则&#xff0c;y 是 x 通过有 S 定…

基于STM32F103和ESP8266的Wi-Fi模块驱动程序设计与优化

基于STM32F103和ESP8266的Wi-Fi模块驱动程序设计和优化是一个重要的任务&#xff0c;它将使STM32F103微控制器能够与ESP8266模块进行通信并实现无线网络连接。在本文中&#xff0c;我们将介绍如何设计和优化这样的驱动程序&#xff0c;并提供相关的代码示例。 1. 系统概述 Wi…

Ubuntu root 远程登录失败

背景&#xff1a;设置了两个系统用户&#xff1a;root、test&#xff1b;test可以登录&#xff0c;可以使用su 命令切换root用户登录成功&#xff1b; 但是直接用root登录&#xff0c;会报错。 查看登录日志的方法&#xff1a; 需要两个远程窗口&#xff0c;在第一个远程窗口…

案例103:基于微信小程序的移动网赚项目设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

OCR字符识别:开始批量识别身份证信息

身份证信息批量识别OCR是一项解决方案&#xff0c;它能够将身份证照片打包成zip格式或通过URL地址进行提交&#xff0c;并能够识别照片中的文本信息。最终&#xff0c;用户可以将识别结果生成为excel文件进行下载。 API接口功能&#xff1a; 1. 批量识别&#xff1a;支持将多…

SmartX 超融合和分布式存储支持哪些信创硬件?如何选型配置?

为了推动 IT 基础架构国产化转型&#xff0c;不少用户都使用 SmartX 超融合和分布式存储构建信创云基础设施。其中&#xff0c;信创硬件的选型与配置往往是用户在规划与部署环节关注的重点&#xff1a;国产 CPU/存储怎么选&#xff1f;哪个系列/型号的性价比最高&#xff1f;如…

rpb/rpc文件说明与matlab读取

什么是rpb/rpc文件&#xff1f; rpb文件是用来存储用于遥感数据几何校正的RPC&#xff08;Rational Polynomial Coefficients &#xff09;模型的文件。类似的还有RPC文件&#xff0c;rpb与rpc文件只是格式不同&#xff0c;但包含的信息一致。其用于从图像坐标转换到地理坐标&a…

DartSDK下载

下载DartSDK(具有开发Dart命令行、服务器和非FlutterWeb应用程序所需的库和命令行工具(底层支持作用系统库)) 1.Homebrew环境 //brew --version 2.brew tap dart-lang/dart 3.brew install dart 修改host 下载成功 描述信息查看 AndroidStudio 引入配置 备注&#xff1a; …

x-cmd pkg | czg - git commit 智能生成工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 czg 源于 commitizen/cz-cli 交互插件中 cz-git 的延伸项目&#xff0c;重新使用 TypeScript 编写的零依赖独立的 Node.js 命令行工具。旨在使用交互友好的方式&#xff0c;辅助用户生成规范的 git commit message 约…

红队专题-Golang工具ChYing

Golang工具ChYing 招募六边形战士队员原chying工具代码分析并发访问控制并发 原子 写入读取 通道嵌套映射结构初始化启动代理服务器重启代理服务器 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 原chying工具代码分析 前有 Chying 后有…

如何设置gitlab.rb 将所有数据运行目录放置到指定目录

如何设置gitlab.rb 将所有数据运行目录放置到指定目录 在GitLab中&#xff0c;要将所有数据目录&#xff08;包括仓库、日志和其他配置文件&#xff09;移动到一个自定义位置&#xff0c;你需要编辑GitLab的配置文件 /etc/gitlab/gitlab.rb。这里主要关注的是 git_data_dir 配置…