// +build goplugin package goplugin import ( "fmt" "os" "path" "path/filepath" "plugin" "strings" ) // loadExternalPlugins loads external plugins from shared libraries (.so, .dll, etc.) // in the specified directory. func LoadExternalPlugins(rootDir string) error { return filepath.Walk(rootDir, func(pth string, info os.FileInfo, err error) error { // Stop if there was an error. if err != nil { return err } // Ignore directories. if info.IsDir() { return nil } // Ignore files that aren't shared libraries. ext := strings.ToLower(path.Ext(pth)) if ext != ".so" && ext != ".dll" { return nil } // Load plugin. _, err = plugin.Open(pth) if err != nil { return fmt.Errorf("error loading %s: %s", pth, err) } return nil }) }