首頁 > 後端開發 > Golang > **您可以在 Go 外掛程式和主機應用程式之間共用自訂資料類型嗎?

**您可以在 Go 外掛程式和主機應用程式之間共用自訂資料類型嗎?

Patricia Arquette
發布: 2024-10-26 10:16:02
原創
935 人瀏覽過

**Can You Share Custom Data Types Between Go Plugins and the Host Application?**

Go 外掛程式中的自訂資料類型共用

在 Go 外掛程式中,可以匯出 Go 符號並從主機應用程式存取它們。然而,問題是自訂資料類型是否可以在插件和應用程式之間共享,特別是作為結構體。

型別斷言限制

乍一看,使用 type將導出的符號轉換為特定結構的斷言似乎很簡單。例如:

import (
    "plugin"
)

// defined in plugin.so
type Person struct {
    Name string
}

func main() {
    // ... Establish connection to plugin ...
    sym, _ := plug.Lookup("P")
    var p Person
    p, ok := sym.(Person) // assertion attempt
    // ...
}
登入後複製

不幸的是,此嘗試在運行時失敗並出現錯誤,指示「符號類型錯誤」。此錯誤訊息源自於以下事實:主包中定義的識別碼無法從其他包引用。因此,插件導出的標識符不能與主應用程式中的對應標識符具有相同的類型。即使類型定義相同,由於涉及不同的類型對象,類型斷言也會失敗。

單獨的套件方法

為了規避這個限制,我們可以定義自訂資料類型位於單獨的套件中,並將其匯入插件和主應用程式中。這允許兩個組件共享相同的類型定義。

這是一個例子:

separate_pkg/filter/filter.go:

package filter

type Filter struct {
    Name string
    Age  int
}
登入後複製

plugin.

// import "separate_pkg/filter"

var MyFilter = filter.Filter{
    Name: "Bob",
    Age:  21,
}

// ...
登入後複製

main.go:

以上是**您可以在 Go 外掛程式和主機應用程式之間共用自訂資料類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板