code: func GetAll(imp string) ([]*Plugin, error) {
  	pluginNames, err := Scan()
  	if err != nil {
  		return nil, err
  	}
  
  	type plLoad struct {
  		pl  *Plugin
  		err error
  	}
  
  	chPl := make(chan *plLoad, len(pluginNames))
  	var wg sync.WaitGroup
  	for _, name := range pluginNames {
  		storage.Lock()
  		pl, ok := storage.plugins[name]
  		storage.Unlock()
  		if ok {
  			chPl <- &plLoad{pl, nil}
  			continue
  		}
  
  		wg.Add(1)
  		go func(name string) {
  			defer wg.Done()
  			pl, err := loadWithRetry(name, false)
  			chPl <- &plLoad{pl, err}
  		}(name)
  	}
  
  	wg.Wait()
  	close(chPl)
  
  	var out []*Plugin
  	for pl := range chPl {
  		if pl.err != nil {
  			logrus.Error(pl.err)
  			continue
  		}
  		if err := pl.pl.waitActive(); err == nil && pl.pl.implements(imp) {
  			out = append(out, pl.pl)
  		}
  	}
  	return out, nil
  }
docs: // GetAll returns all the plugins for the specified implementation