golang复习-golang插件化检查

func pluginCheck(plugins *Plugins) (bool, string) {

// plugins.GetPluginNumber()获取插件的数量

infoChan := make(chan PluginMessage, plugins.GetPluginNumber())

errChan := make(chan error, 1)

done := make(chan bool, 1)

wg := sync.WaitGroup{}

//并发执行插件中的检查

for name, plugin := range plugins.PluginMap {

wg.Add(1)

go func(plugin PluginChecker, name string) {

defer wg.Done()

//插件的方法

ok, reson, err := plugin.DoCheck()

if err != nil {

errChan <- err

return

}

infoChan <- PluginMessage{

PluginName: name,

GoodCheck: ok,

Message: reson,

}

}(plugin, name)

}

go func() {

wg.Wait()

close(infoChan)

close(done)

}()

select {

case <-done:

for info := range infoChan {

if !info.GoodCheck {

return info.GoodCheck, info.Message

}

}

 

case err := <-errChan:

return false, err.Error()

}

return true, ""

}


请使用浏览器的分享功能分享到微信等