shared object

  1. Compile str.go to shared object(str.so).2. Fill in the blanks in line A and B to call function UpperCase(string) string.
  1. // str.go
  2. package main
  3. import "strings"
  4. func UpperCase(s string) string {
  5. return strings.ToUpper(s)
  6. }
  7. // main.go
  8. package main
  9. import (
  10. "fmt"
  11. "log"
  12. "plugin"
  13. )
  14. func main() {
  15. p, err := plugin.Open("str.so")
  16. if err != nil {
  17. log.Panicf("plugin.Open: %s\n", err)
  18. }
  19. f, err := ___ // A
  20. if err != nil {
  21. log.Panicf("Lookup UpperCase: %s\n", err)
  22. }
  23. UpperCase, ok := ___ // B
  24. if !ok {
  25. log.Panicf("UpperCase assertion: %s\n", err)
  26. }
  27. s := UpperCase("hello")
  28. fmt.Println(s)
  29. }

Answer

  1. go build -buildmode=plugin -o str.so str.go
  2. package main
  3. import (
  4. "fmt"
  5. "log"
  6. "plugin"
  7. )
  8. func main() {
  9. p, err := plugin.Open("str.so")
  10. if err != nil {
  11. log.Panicf("plugin.Open: %s\n", err)
  12. }
  13. f, err := p.Lookup("UpperCase")
  14. if err != nil {
  15. log.Panicf("Lookup UpperCase: %s\n", err)
  16. }
  17. UpperCase, ok := f.(func(string) string)
  18. if !ok {
  19. log.Panicf("UpperCase assertion: %s\n", err)
  20. }
  21. s := UpperCase("hello")
  22. fmt.Println(s)
  23. }