在 Go 外掛程式開發中,可以尋求與在 Go 外掛程式中定義的自訂資料類型進行互動。來自主應用程式的插件。雖然檢索導出的符號並將它們表示為介面是可行的,但出現了問題:我們可以將它們鍵入自訂結構嗎?
直接答案是否定的,因為主套件無法存取其他套件中定義的識別碼。因此,插件中導出的標識符不能與應用程式共用相同的類型。即使插件和應用程式中具有相同的 Person 類型定義,類型斷言也會因其固有的區別而失敗。
但是,有一個解決方法。在單獨的包中定義類型允許其在插件和應用程式中使用。這將啟用自訂結構的類型斷言。
這是一個示例:
自定義類型定義:
<code class="go">package filter type Filter struct { Name string Age int }</code>
插件代碼:
<code class="go">package main import ( "play/filter" ) var MyFilter = filter.Filter{ Name: "Bob", Age: 21, } func CreateFilter() filter.Filter { return filter.Filter{ Name: "Bob", Age: 21, } }</code>
主應用程式:
<code class="go">package main import ( "fmt" "log" "os" "play/filter" "plugin" ) func main() { p, err := plugin.Open("plugin.so") if err != nil { log.Fatal(err) } mf, err := p.Lookup("MyFilter") if err != nil { log.Fatal(err) } f, ok := mf.(*filter.Filter) if !ok { log.Fatal("Wrong symbol type") } fmt.Printf("%+v\n", f) }</code>
執行此展示了成功的類型斷言和資料擷取:
&{Name:Bob Age:21}
必須注意插件中匯出的標識符之間的類型差異(MyFilter 的變數類型,CreateFilter 的函數類型)和從外掛程式尋找時獲得的符號類型(變數的指標類型,函數的相同類型)之間的類型差異。
透過利用此方法,開發人員可以在 Go 外掛程式和應用程式之間共用自訂資料類型,從而促進元件間的高效通訊。
以上是## 您可以透過 Go 外掛程式鍵入斷言自訂資料類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!