main.go 745 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package main
  2. import (
  3. "os"
  4. "path"
  5. "plugin"
  6. )
  7. func getPlugins(pluginDir string) ([]func(string), error) {
  8. pDir, err := os.Open(pluginDir)
  9. if err != nil {
  10. return nil, err
  11. }
  12. pFiles, err := pDir.Readdir(0)
  13. if err != nil {
  14. return nil, err
  15. }
  16. var ret []func(string)
  17. for _, pFile := range pFiles {
  18. if pFile.IsDir() {
  19. continue
  20. }
  21. p, err := plugin.Open(path.Join(pluginDir, pFile.Name()))
  22. if err != nil {
  23. return nil, err
  24. }
  25. sayHello, err := p.Lookup("SayHello")
  26. if err != nil {
  27. return nil, err
  28. }
  29. ret = append(ret, sayHello.(func(string)))
  30. }
  31. return ret, nil
  32. }
  33. func main() {
  34. pluginDir := os.Args[1]
  35. ps, err := getPlugins(pluginDir)
  36. if err != nil {
  37. panic(err)
  38. }
  39. for _, p := range ps {
  40. p("Gildas")
  41. }
  42. }