func (l *PluginLoader) Load(id string) (plugins.Plugin, error) {
	pluginPath := fmt.Sprintf("%v/%v.so", l.PluginDir, id)
	p, err := plugin.Open(pluginPath)
	if err != nil {
		log.Printf("Error loading plugin %v: %v", pluginPath, err)
		return nil, err
	}
	pluginExportedName := strings.Title(id)
	var obj plugin.Symbol
	obj, err = p.Lookup(pluginExportedName)
	if err != nil {
		log.Printf("Error loading plugin %v: %v", pluginExportedName, err)
		return nil, err
	}
	loadedPlugin, ok := obj.(plugins.Plugin)
	if !ok {
		return nil, fmt.Errorf("Unexpexted type %T of plugin %v. Expected 'enforcer.Plugin'",
			obj, pluginExportedName)
	}
	return loadedPlugin, nil
}
Load the given plugin using the native plugin support introduced in Go 1.8

Plugins must follow the plugin conventions:
- Be present in the configured 'PluginDir/name.so' (plugin name in lowercase)
- Must export a variable named 'Name' (the capitalized name of the plugin) of
type 'enforcer.Plugin'
package native
import (
	"fmt"
	"log"
	"plugin"
	"strings"
	"github.com/padmeio/padme/enforcer/plugins"
)
type PluginLoader struct {
	PluginDir string
}