【golang】go-channel-goroutine实践2

需求:获取数组数据,对数据的原始数据逐个进行处理,后返回处理完的数据

目标:对列表数据进行逐个goroutine并发处理,再用select整合,返回数据

type  money_per struct{
       id int
       name string
       money float64
}
type MoneyHandler interface {
       BatchDeal(m money_per)
}
type MoneyHandlerImpl struct {
}

func getMoneyHandler() MoneyHandler  {
       return &MoneyHandlerImpl{}
}

var moneyPers = make([]money_per, 10)
var mchan = make(chan money_per, 100)

//初始化
func init()  {
       for  i :=0; i<10 ;i++  {
              var moneyPer = money_per{i, "ww"+strconv.Itoa(i), float64(i)}
              moneyPers[i] = moneyPer
       }
}

//业务处理
func (monnryHandler MoneyHandlerImpl)BatchDeal(m money_per) {
       m.money +=11.0
       time.Sleep(time.Second)
       mchan <- m
}

func main() {
       fmt.Println(moneyPers, cap(moneyPers), len(moneyPers))
       t1 := time.Now()
       moneyHandler := getMoneyHandler()
       for mm := range moneyPers{
              fmt.Println(moneyPers[mm])
              go moneyHandler.BatchDeal(moneyPers[mm])
       }
       elapsed0 := time.Since(t1)
       fmt.Println("App elapsed0: ", elapsed0)
       rm := make([]money_per,10)
       for  i :=0; i<10 ;i++  {
              //m := <-mchan
              //rm[m.id] = m
              //fmt.Println(m)
              select { // select轮询机制
              case m := <- mchan:
                     fmt.Println(m)
                     rm[m.id] = m
              }
       }
       elapsed := time.Since(t1)
       fmt.Println("App elapsed: ", elapsed)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值