Dans Go, une structure implémente une interface si elle implémente toutes les méthodes de cette interface. Cependant, si une méthode struct a un paramètre qui implémente l'interface, la struct n'implémentera pas l'interface.
package main type A interface { Close() } type B interface { Connect() (A, error) } type C struct { } func (c *C) Close() { } type D struct { } func (d *D) Connect() (*C, error) { c := new(C) return c, nil } func test(b B) { } func main() { d := new(D) test(d) }
Dans l'exemple ci-dessus, la struct D n'implémente pas l'interface B car la méthode Connect de D a un paramètre qui implémente l'interface A. Le message d'erreur que vous obtenez est :
cannot use d (type *D) as type B in argument to test: *D does not implement B (wrong type for Connect method) have Connect() (*C, error) want Connect() (A, error)
Pour corriger cette erreur, vous devez modifier le type du paramètre dans la méthode Connect de D en A.
type D struct { } func (d *D) Connect() (A, error) { c := new(C) return c, nil }
Maintenant, la structure D implémentera l'interface B, et vous pourrez appeler la fonction test() avec une valeur D comme argument.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!