【发布时间】:2018-05-24 18:28:41
【问题描述】:
我知道可以查找已导出的 go-plugin 符号并将它们键入到 interface 中。但是,我想知道是否有办法将它们键入到结构中,例如。有什么办法吗?
例如:
plugin.go
package main
type Person struct {
Name string
}
var (
P = Person{
Name: "Emma",
}
)
app.go
package main
import (
"fmt"
"plugin"
"os"
)
func main() {
plug, err := plugin.Open("./plugin.so")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
sym, err := plug.Lookup("P")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
var p Person
p, ok := sym.(Person)
if !ok {
fmt.Println("Wrong symbol type")
os.Exit(1)
}
fmt.Println(p.Name)
}
Person 的符号 P 是在调用 plug.Lookup 时找到的。但是,我无法将 P 类型断言为 Person,我得到一个执行时间错误。在本例中,“符号类型错误”。
有没有办法实现这一点,或者在插件和应用程序之间共享数据的唯一方法是使用接口?
谢谢。
【问题讨论】: