


Wie konvertiert man eine Schnittstelle in eine andere, von ihr implementierte Schnittstelle?
Feb 13, 2024 pm 08:45 PMphp-Editor Strawberry zeigt Ihnen, wie Sie eine Schnittstelle in eine andere von ihr implementierte Schnittstelle umwandeln. In der Programmierung ist eine Schnittstelle ein abstrakter Typ, der eine Reihe von Methoden definiert, während eine andere Schnittstelle ein konkreter Typ ist, der diese Methoden implementiert. Durch die Konvertierung einer Schnittstelle in eine andere können wir bestehende Funktionen erweitern, ohne den ursprünglichen Code zu ändern. In diesem Artikel wird dieser Prozess ausführlich erläutert und Beispieldemonstrationen bereitgestellt, um den Lesern zu helfen, diese Technik besser zu verstehen und anzuwenden.
Frageninhalt
Kurz gesagt – Ich möchte in der Lage sein, einen Schnittstellentyp, dessen zugrunde liegender Typ eine bestimmte Schnittstelle implementiert, in diese bestimmte Schnittstelle umzuwandeln.
Ich verwende das Plugin-Paket, um eine neue Funktion zu finden, und sie sieht folgendermaßen aus (ich habe viele andere identische Funktionen):
func newdomainprimarykey() any { return domainprimarykey{} }
(Dies wird zur Laufzeit generiert, daher kann ich es nicht einfach als Domänenprimärschlüssel referenzieren)
Meine Suche und mein Anruf sehen so aus:
plugin, err := plugin.open("my-plugin") if err != nil { return err } symget, err := plugin.lookup("new" + pluginname) if err != nil { return err } newgenmodel, ok := symget.(func() any) if !ok { return errors.new("unexpected type from module symbol") } anygenmodel := newgenmodel() genmodel, ok := anygenmodel.(genmodel) // **this is where the problem is if !ok { return errors.new("unexpected type from module symbol") } genmodelinstance := genmodel.get()
Oben habe ich versucht, „anygenmodel“ (eine Schnittstelle) in die von ihr implementierte „genmodel“-Schnittstelle zu konvertieren, aber das funktioniert nicht.
Ich bin sicher, dass diese Schnittstelle implementiert wird, denn wenn ich Folgendes mache, erhalte ich keine Fehler.
type GenModel interface { Get() any TableName() string } var _ GenModel = (*DomainPrimaryKey)(nil) // this doesn't complain
Was soll ich tun? Ich habe diesen Artikel gefunden, der nicht das ist, wonach ich suche, der aber ähnlich aussieht.
Vielen Dank im Voraus für jede Hilfe – das ist für mich zu einer echten Hürde geworden.
Workaround
Wenn der zugrunde liegende Typ diese beiden Schnittstellen implementiert, ist es ganz einfach:
package main import "fmt" type IFace1 interface { DoThis() } type IFace2 interface { DoThat() } type impl struct{} func (i *impl) DoThis() { fmt.Println("I implement IFace1") } func (i *impl) DoThat() { fmt.Println("I implement IFace2") } func GetIFace1() IFace1 { return &impl{} } func main() { i1 := GetIFace1() i1.DoThis() i2 := i1.(IFace2) i2.DoThat() }
Wenn Ihr Code nicht funktioniert, würde ich zunächst Ihre Behauptung in Frage stellen, nämlich anygenmodel
的底层类型实际上实现了 genmodel
, und von dort aus arbeiten.
Das obige ist der detaillierte Inhalt vonWie konvertiert man eine Schnittstelle in eine andere, von ihr implementierte Schnittstelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?
