Sobes.tech
Senior

Sollte die Schnittstelle am Implementierungsort oder am Ort der Verwendung definiert werden?

sobes.tech KI

Antwort von AI

In Go ist es besser, Schnittstellen dort zu definieren, wo sie verwendet werden, nicht dort, wo sie implementiert werden. Dies ermöglicht die Erstellung minimaler Schnittstellen, die nur die Methoden beschreiben, die der Verbraucher tatsächlich benötigt.

Dieser Ansatz erhöht die Flexibilität und vereinfacht das Testen, da die Implementierung nicht alle Schnittstellen kennen muss, nur die, die sie benötigt.

Beispiel:

// Am Ort der Verwendung
type Reader interface {
    Read(p []byte) (n int, err error)
}

func Process(r Reader) {
    // verwendet nur die Read-Methode
}

// Am Ort der Implementierung
type File struct {}
func (f *File) Read(p []byte) (int, error) {
    // Implementierung
}

Auf diese Weise wird die Schnittstelle basierend auf den Bedürfnissen des Kunden definiert, nicht auf der Implementierung.