Schnittstellen mit versteckten Methoden implementieren
Bei der Entwicklung eines Buchhaltungssystems kann es wünschenswert sein, bestimmte Implementierungen einer Schnittstelle vor dem Hauptprogramm zu verbergen um sicherzustellen, dass nur ein Buchhaltungssystem aktiv ist. Um dies zu erreichen, kann man erwägen, die Schnittstellenmethoden nicht zu exportieren und exportierte Funktionen zu erstellen, die eine Funktion von einem lokalen Adapter aufrufen.
package accounting import "errors" type IAdapter interface { getInvoice() error } var adapter IAdapter func SetAdapter(a IAdapter) { adapter = a } func GetInvoice() error { if (adapter == nil) { return errors.New("No adapter set!") } return adapter.getInvoice() }
Bei diesem Ansatz tritt jedoch ein Kompilierungsfehler auf, da der Compiler nicht auf die nicht exportierte getInvoice zugreifen kann Methode aus dem Accountingsystem-Paket.
cannot use adapter (type accountingsystem.Adapter) as type accounting.IAdapter in argument to accounting.SetAdapter: accountingsystem.Adapter does not implement accounting.IAdapter (missing accounting.getInvoice method) have accountingsystem.getInvoice() error want accounting.getInvoice() error
Anonymes Strukturfeld Ansatz
Eine mögliche Lösung ist die Verwendung anonymer Strukturfelder. Dadurch kann der Accountingsystem.Adapter zwar die Accounting.IAdapter-Schnittstelle erfüllen, es wird jedoch verhindert, dass der Benutzer seine eigene Implementierung der nicht exportierten Methode bereitstellt.
type Adapter struct { accounting.IAdapter }
Alternativer Ansatz
Ein idiomatischerer Ansatz besteht darin, einen nicht exportierten Adaptertyp zu erstellen und eine Funktion zum Registrieren des Adapters bei der Buchhaltung bereitzustellen Paket.
package accounting type IAdapter interface { GetInvoice() error } package accountingsystem type adapter struct {} func (a adapter) GetInvoice() error {return nil} func SetupAdapter() { accounting.SetAdapter(adapter{}) }
Mit diesem Ansatz wird der Typ „accountingsystem.adapter“ vor dem Hauptprogramm ausgeblendet und das Buchhaltungssystem kann durch Aufrufen der SetupAdapter-Funktion initialisiert werden.
Das obige ist der detaillierte Inhalt vonWie implementiert man versteckte Schnittstellenmethoden in Go richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!