Junior — Middle
Comment peut-on déterminer si une classe ou un objet spécifique implémente une interface particulière?
sobes.tech IA
Réponse de l'IA
En Go, les interfaces sont implémentées de manière implicite : si un type implémente toutes les méthodes d'une interface, il est automatiquement considéré comme implémentant cette interface.
Pour vérifier si un type spécifique implémente une interface, vous pouvez utiliser une assertion de type ou essayer d'assigner une valeur de ce type à une variable de type interface.
Exemple :
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
// Vérification de l'implémentation de l'interface par assignation
r = mr // si MyReader n'implémente pas Reader, il y aura une erreur de compilation
// Vérification par assertion de type
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader implémente l'interface Reader")
} else {
fmt.Println("MyReader n'implémente pas l'interface Reader")
}
}
Ainsi, le compilateur Go garantit la conformité à l'interface, et à l'exécution, cela peut être vérifié par une assertion de type.