go channel 实战

462 阅读1分钟

实现一个常驻任务,读取监控数据,上报到监控系统

设计思路

在主任务中启动一个异步goroutine监听channel数据,当channel中有数据到来时,就执行上报操作

异步任务函数

func readBufferWorker(chans <- chan int ) {
   for  {
      if datas,ok := <- chans;ok {
         
         // send to 监控
      }
   }
}

主进程发送监控数据

func sendDataWorker(data int){
   chans <- data
}

整体代码如下

package main

import (
   "fmt"
   "sync"
)

var chans chan int
var wg sync.WaitGroup

func readBufferWorker(chans <- chan int ) {
   for  {
      if datas,ok := <- chans;ok {
         fmt.Println(datas)
      }
   }
}

func sendDataWorker(data int){
   chans <- data
}

func main() {

   wg.Add(1)
   chans = make(chan int, 20)
   go readBufferWorker(chans)


   // 发送数据
   for i := 0; i < 10; i++ {
      sendDataWorker(i)
   }
   defer close(chans)
   wg.Wait()
   fmt.Println("end")
}
```