Schnittstellen mit nicht exportierten Methoden paketübergreifend implementieren
Sie versuchen, den Zugriff auf die Implementierungsdetails einer Schnittstelle einzuschränken, indem Sie deren Methoden nicht exportieren. Dies ist zwar ein gültiger Ansatz, kann jedoch bei der Implementierung der Schnittstelle in einem separaten Paket zu Herausforderungen führen.
Das Problem
Der Compiler löst einen Fehler aus, da er nicht auf die Schnittstelle zugreifen kann nicht exportierte getInvoice-Methode von Accountingsystem.Adapter. Dies liegt an den Sichtbarkeitsregeln der Go-Sprache, die verhindern, dass Pakete nicht exportierte Bezeichner außerhalb ihres eigenen Bereichs verwenden.
Mögliche Lösung
Leider gibt es keinen direkten Weg dazu Implementieren Sie eine Schnittstelle mit nicht exportierten Methoden in einem anderen Paket. Es gibt jedoch alternative Methoden, um ähnliche Ergebnisse zu erzielen.
Anonyme Strukturfelder verwenden
Sie können die Schnittstelle als anonymes Feld innerhalb einer Struktur im separaten Paket einbetten. Dies ermöglicht zwar, dass die Struktur die Schnittstelle erfüllt, macht es aber auch unmöglich, eine eigene Implementierung der nicht exportierten Methoden zu definieren.
Registrieren des Adapters
Ein geeigneterer Ansatz besteht darin, den Adaptertyp nicht exportiert zu machen und eine Funktion innerhalb des Adapterpakets bereitzustellen, die ihn beim Hauptpaket registriert. Dadurch können Sie den Zugriff auf den Adapter steuern und gleichzeitig die Flexibilität bewahren.
// accountingsystem package type adapter struct {} // ... implementation omitted ... func SetupAdapter() { accounting.SetAdapter(adapter{}) } // main package func main() { accountingsystem.SetupAdapter() }
Mit dieser Methode können Sie den Zugriff auf die Implementierung des Adapters einschränken und gleichzeitig sicherstellen, dass die Schnittstelle paketübergreifend verwendet werden kann.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Schnittstelle mit nicht exportierten Methoden in einem anderen Go-Paket implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!