golang中多goroutine的用法

func (dis *Distributor) flushData(logMsgs []*pbdata.Log) {
	log.Debug("flush data start...")
	if len(logMsgs) == 0 {
		return
	}

	wg := new(sync.WaitGroup)
	for i := 0; i < len(dis.plugins); i++ {
		wg.Add(1)
		go dis.callPlugin(i, logMsgs, wg)
	}

	wg.Wait()

	log.Infof("flush data ok")
}

func (dis *Distributor) callPlugin(i int, logMsgs []*pbdata.Log, wg *sync.WaitGroup) {
	defer wg.Done()

	msgs := dis.plugins[i].Filter(logMsgs)
	err := dis.plugins[i].Run(msgs)
	if err != nil {
		log.Warnf("plugin(%s): run error - %s", dis.plugins[i].Name(), err)
	}
}

猜你喜欢

转载自blog.csdn.net/wwyl1001/article/details/85839863