Heim >Backend-Entwicklung >Golang >Können Go-Schnittstellen mit nicht exportierten Methoden in verschiedenen Paketen implementiert werden?

Können Go-Schnittstellen mit nicht exportierten Methoden in verschiedenen Paketen implementiert werden?

Susan Sarandon
Susan SarandonOriginal
2024-12-10 06:18:10133Durchsuche

Can Go Interfaces Be Implemented with Unexported Methods in Different Packages?

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!

Stellungnahme:
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