在 Go 插件中,可以在插件和应用程序之间共享自定义数据类型,但不能通过直接类型断言。
要定义共享类型,请在单独的包中创建它们并将其导入插件和主应用程序中。例如:
共享类型包:
<code class="go">package shared type Person struct { Name string }</code>
插件代码:
<code class="go">package main import ( "shared" ) var P = shared.Person{Name: "Emma"}</code>
Main应用程序代码:
<code class="go">package main import ( "fmt" "plugin" "shared" "os" ) func main() { plug, err := plugin.Open("./plugin.so") if err != nil { fmt.Println(err) os.Exit(1) } // Lookup shared type symbol sym, err := plug.Lookup("P") if err != nil { fmt.Println(err) os.Exit(1) } // Type-assert symbol into shared type var p shared.Person p, ok := sym.(shared.Person) if !ok { fmt.Println("Wrong symbol type") os.Exit(1) } // Use shared type as expected fmt.Println(p.Name) }</code>
从插件查找变量符号时,结果是指向变量的指针,即使它是一个非指针类型。这允许从插件修改变量的值。
通过使用在单独的包中定义的共享类型,可以在 Go 插件和应用程序之间传递自定义数据类型,从而使高效的数据交换并扩展插件的功能。
以上是如何在 Go 插件及其应用程序之间共享自定义数据类型?的详细内容。更多信息请关注PHP中文网其他相关文章!