Heim >Backend-Entwicklung >Golang >Warum löst die Rückgabe eines Plugin-Symbols als Funktion Probleme mit der Go-Plugin-Schnittstellenbindung?
Beim Versuch, ein Plugin zu importieren, das eine außerhalb beider Pakete definierte Schnittstelle implementiert, wird das Plugin-Symbol an gebunden Eine Schnittstelle fällt aus. Dies geschieht trotz der Strukturimplementierung der Schnittstelle durch das Plugin.
Das Problem entsteht durch den Ansatz, eine Variable im Plugin nachzuschlagen, das einen Zeiger auf diese Variable zurückgibt. Das Typ-Assertieren einer Schnittstelle von einem Wert vom Typ Zeiger auf die Schnittstelle ist nie erfolgreich. Stattdessen besteht die Lösung darin, eine Funktion aus dem Plugin zu exportieren, die den gewünschten Schnittstellentyp zurückgibt.
func Greeter() iface.IPlugin { return testpl{} }
Das Plugin-Paket funktioniert, indem es beim Nachschlagen von Variablen Zeiger auf Werte zurückgibt. Für eine Variable vom Typ iface.IPlugin führt dies zu einem Zeiger auf eine Schnittstelle, deren Typ nicht auf iface.IPlugin angewendet werden kann.
Durch die Rückgabe einer Funktion vom Plugin ist für die Suchoperation kein Zeiger mehr erforderlich . Die Funktion kann dann aufgerufen werden, um den gewünschten Schnittstellenwert zu erhalten.
Um diesen Ansatz zu nutzen, sollte die Plugin-Definition aktualisiert werden, um eine Funktion verfügbar zu machen, die die Schnittstellenimplementierung zurückgibt. Das Programm kann dann diese Funktion nachschlagen und sie verwenden, um die Greeter-Instanz abzurufen.
// 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()
Dieser Ansatz vermeidet den Aufwand indirekter Typzusicherungen und die Verwirrung, die durch die Verwendung von Zeigern verursacht wird. Darüber hinaus ermöglicht es eine intuitivere Möglichkeit, die Funktionalität eines Plugins bereitzustellen.
Das obige ist der detaillierte Inhalt vonWarum löst die Rückgabe eines Plugin-Symbols als Funktion Probleme mit der Go-Plugin-Schnittstellenbindung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!