shared object
- Compile str.go to shared object(str.so).2. Fill in the blanks in line A and B to call function
UpperCase(string) string
.
// str.go
package main
import "strings"
func UpperCase(s string) string {
return strings.ToUpper(s)
}
// main.go
package main
import (
"fmt"
"log"
"plugin"
)
func main() {
p, err := plugin.Open("str.so")
if err != nil {
log.Panicf("plugin.Open: %s\n", err)
}
f, err := ___ // A
if err != nil {
log.Panicf("Lookup UpperCase: %s\n", err)
}
UpperCase, ok := ___ // B
if !ok {
log.Panicf("UpperCase assertion: %s\n", err)
}
s := UpperCase("hello")
fmt.Println(s)
}
Answer
go build -buildmode=plugin -o str.so str.go
package main
import (
"fmt"
"log"
"plugin"
)
func main() {
p, err := plugin.Open("str.so")
if err != nil {
log.Panicf("plugin.Open: %s\n", err)
}
f, err := p.Lookup("UpperCase")
if err != nil {
log.Panicf("Lookup UpperCase: %s\n", err)
}
UpperCase, ok := f.(func(string) string)
if !ok {
log.Panicf("UpperCase assertion: %s\n", err)
}
s := UpperCase("hello")
fmt.Println(s)
}