Sobes.tech
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.