首页  >  文章  >  后端开发  >  如何在 Go 插件及其应用程序之间共享自定义数据类型?

如何在 Go 插件及其应用程序之间共享自定义数据类型?

Patricia Arquette
Patricia Arquette原创
2024-10-25 08:40:29815浏览

How Can I Share Custom Data Types Between a Go Plugin and Its Application?

在 Go 插件和应用程序之间共享自定义数据类型

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn