Heim > Backend-Entwicklung > Golang > Wie kann ich eine Schnittstelle mit nicht exportierten Methoden in einem anderen Go-Paket implementieren?

Wie kann ich eine Schnittstelle mit nicht exportierten Methoden in einem anderen Go-Paket implementieren?

DDD
Freigeben: 2024-11-29 17:00:12
Original
209 Leute haben es durchsucht

How Can I Implement an Interface with Unexported Methods in a Different Go Package?

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()
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage