Heim >Backend-Entwicklung >Golang >Können Go-Schnittstellen mit nicht exportierten Methoden in verschiedenen Paketen implementiert werden?
Implementieren von Schnittstellen mit nicht exportierten Methoden in Go
Stellen Sie sich eine Situation vor, in der Sie eine Schnittstelle für den Zugriff auf das Buchhaltungssystem definieren und dabei bestimmte Implementierungsdetails verbergen möchten . Sie beabsichtigen, die Schnittstellenmethoden nicht exportiert zu machen und exportierte Funktionen im Basispaket bereitzustellen, die dieselbe Funktion von einem lokalen Adapter aufrufen. Allerdings gibt der Compiler aufgrund der nicht exportierten Implementierung der Methode einen Fehler aus.
Ist es möglich, eine Schnittstelle mit nicht exportierten Methoden in einem anderen Paket zu implementieren?
Antwort:
Eine mögliche Lösung ist die Verwendung anonymer Strukturfelder:
type Adapter struct { accounting.IAdapter }
Allerdings Es ist unbedingt zu beachten, dass dieser Ansatz die Bereitstellung einer eigenen Implementierung der nicht exportierten Methoden nicht zulässt. Mit anderen Worten: Sie können die Implementierung von IAdapter.getInvoice() im Adapter nicht überschreiben.
Alternativer Ansatz:
Wenn der Typ „accountingsystem.Adapter“ vor anderen Paketen verborgen ist Wenn gewünscht, machen Sie den Typ nicht exportiert und erstellen Sie eine Funktion zum Registrieren des Adapters beim Buchhaltungspaket:
package accounting type IAdapter interface { GetInvoice() error } --- package accountingsystem type adapter struct {} func (a adapter) GetInvoice() error {return nil} func SetupAdapter() { accounting.SetAdapter(adapter{}) } --- package main func main() { accountingsystem.SetupAdapter() }
Dieser Ansatz behebt das Problem durch Einschließen des nicht exportierten Adaptertyps in das Buchhaltungspaket, wodurch dessen Zugriff auf andere Pakete effektiv eingeschränkt wird.
Das obige ist der detaillierte Inhalt vonKönnen Go-Schnittstellen mit nicht exportierten Methoden in verschiedenen Paketen implementiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!