GoLang 使用协程和管道获取随机数
1 package main 2 3 import ( 4 "fmt" 5 "math/rand" 6 "time" 7 ) 8 9 var ( 10 //Count 统计获取随机数的个数 11 Count int = 0 12 //MaxRandomNumberLength 最大随机数长度 13 MaxRandomNumberLength int = 100 14 //RandomNumberRange 随机数范围 15 RandomNumberRange int = 1000 16 ) 17 18 //CreateRandomeNumber 创建随机数 协程 19 func CreateRandomeNumber(RandomChan chan int, ExitChan chan bool) { 20 rand.Seed(time.Now().UnixNano()) 21 for i := 0; i < MaxRandomNumberLength; i++ { 22 RandomChan <- rand.Intn(RandomNumberRange) + 1 23 Count++ 24 } 25 fmt.Printf("一共获取 %v 个随机数\n", Count) 26 close(RandomChan) 27 ExitChan <- true 28 } 29 30 //SortRandomNumber 随机数排序 协程 31 func SortRandomNumber(Randomchan chan int, SortChan chan int, ExitChan chan bool) { 32 var Arr []int 33 Arr = make([]int, MaxRandomNumberLength) 34 35 for i := 0; i < len(Arr); i++ { 36 Arr[i] = <-Randomchan 37 } 38 39 for i := 0; i < len(Arr)-1; i++ { 40 for j := 0; j < len(Arr)-1-i; j++ { 41 if Arr[j] > Arr[j+1] { 42 Arr[j], Arr[j+1] = Arr[j+1], Arr[j] 43 } 44 } 45 } 46 47 for i := 0; i < len(Arr); i++ { 48 SortChan <- Arr[i] 49 } 50 close(SortChan) 51 ExitChan <- true 52 } 53 54 //EnterTheSortedRandomNumber 输出排序后的随机数 55 func EnterTheSortedRandomNumber(SortChan chan int, ExitChan chan bool) { 56 for value := range SortChan { 57 fmt.Println(value) 58 } 59 ExitChan <- true 60 } 61 func main() { 62 // 创建管道 63 RandomChan := make(chan int) 64 SortChan := make(chan int) 65 ExitChan := make(chan bool, 3) 66 67 //开启协程 68 go CreateRandomeNumber(RandomChan, ExitChan) 69 go SortRandomNumber(RandomChan, SortChan, ExitChan) 70 go EnterTheSortedRandomNumber(SortChan, ExitChan) 71 72 fmt.Println("主线程等待协程中...") 73 func() { 74 for i := 0; i < 3; i++ { 75 <-ExitChan 76 fmt.Println("协程完成工作...") 77 } 78 close(ExitChan) 79 }() 80 fmt.Println("主线程结束") 81 }
时间若流水,恍惚间逝去
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?