首頁 >後端開發 >Golang >為什麼將插件符號作為函數返回可以解決 Go 插件介面綁定問題?

為什麼將插件符號作為函數返回可以解決 Go 插件介面綁定問題?

Susan Sarandon
Susan Sarandon原創
2024-12-01 11:33:10678瀏覽

Why Does Returning a Plugin Symbol as a Function Solve Go Plugin Interface Binding Issues?

外掛符號作為函數傳回

問題

當嘗試匯入實現兩個套件外部定義的介面的外掛程式時,將外掛符號綁定到接口出現故障。儘管插件的介面的結構實作仍然會發生這種情況。

問題是由從外掛程式中尋找變數的方法引起的,該方法會傳回指向該變數的指標。從指標類型的值到介面鍵入斷言介面永遠不會成功。相反,解決方案是從插件中導出一個返回所需介面類型的函數。

func Greeter() iface.IPlugin { return testpl{} }

說明

外掛程式包透過在尋找變數時傳回指向值的指標來操作。對於 iface.IPlugin 類型的變量,這會產生一個指向介面的指針,該介面不能被類型斷言為 iface.IPlugin。

透過從外掛程式傳回一個函數,找出操作不再需要指標。然後可以呼叫該函數來取得所需的介面值。

用法

要利用此方法,應更新外掛程式定義以公開傳回介面實作的函數。然後程式可以查找這個函數並使用它來取得greeter實例。

// In the plugin
func Greeter() iface.IPlugin { return testpl{} }

// In the main program
Greeter, err := p.Lookup("Greeter")
if err != nil {
    panic(err)
}
greeterFunc, ok := Greeter.(func() iface.IPlugin)
if !ok {
    panic(errors.New("not of expected type"))
}
greeter := greeterFunc()

這種方法避免了間接類型斷言的麻煩和使用指針引起的混亂。此外,它與從插件中公開功能的更直觀的方式相一致。

以上是為什麼將插件符號作為函數返回可以解決 Go 插件介面綁定問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn