package walker import ( "fmt" "os" "plugin" "time" ) // LoadPlugin loads the file path and returns a Fuzzer func LoadPlugin(path string) (Fuzzer, error) { p, err := plugin.Open(path) if err != nil { return nil, err } sym, err := p.Lookup("MyFuzzerFunc") if err != nil { return nil, err } mff, ok := sym.(Fuzzer) if !ok { return nil, fmt.Errorf("plugin at %q did not provide a FuzzFunc named MyFuzzerFunc", path) } return mff, nil } // Fuzzer is a struct that produces a FuzzFunc type Fuzzer interface { Name() string Func() FuzzFunc } // FuzzFunc is like filepath.WalkerFunc, but for poking at `path` type FuzzFunc func(path string, info os.FileInfo, timeout time.Duration) error