Junior — Middle
Wie kann man feststellen, ob eine bestimmte Klasse oder ein Objekt eine bestimmte Schnittstelle implementiert?
sobes.tech KI
Antwort von AI
In Go werden Schnittstellen implizit implementiert: Wenn ein Typ alle Methoden einer Schnittstelle implementiert, gilt er automatisch als Implementierer dieser Schnittstelle.
Um zu überprüfen, ob ein bestimmter Typ eine Schnittstelle implementiert, kann man eine Typassertion verwenden oder versuchen, einen Wert dieses Typs einer Variablen des Schnittstellentyps zuzuweisen.
Beispiel:
package main
import "fmt"
type Reader interface {
Read(p []byte) (n int, err error)
}
type MyReader struct {}
func (r MyReader) Read(p []byte) (n int, err error) {
return 0, nil
}
func main() {
var r Reader
var mr MyReader
// Überprüfung der Schnittstellenimplementierung durch Zuweisung
r = mr // wenn MyReader nicht Reader implementiert, gibt es einen Kompilierungsfehler
// Überprüfung durch Typassertion
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader implementiert die Schnittstelle Reader")
} else {
fmt.Println("MyReader implementiert die Schnittstelle Reader nicht")
}
}
Auf diese Weise garantiert der Go-Compiler die Übereinstimmung mit der Schnittstelle, und zur Laufzeit kann dies durch eine Typassertion überprüft werden.