Maison >développement back-end >Golang >Pourquoi My Go Struct n'implémente-t-il pas l'interface ?
Dans Go, les interfaces dictent la structure d'une méthode, y compris son nom, ses arguments et ses valeurs de retour. Lorsqu'une structure implémente une interface, elle doit strictement respecter les signatures de méthode spécifiées par l'interface.
Considérez cet exemple où une structure, D, et sa méthode, Connect, ne parviennent pas à implémenter l'interface B en raison d'un incompatibilité dans la valeur de retour :
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) { // Mismatched function signature compared to interface B's Connect method c := new(C) return c, nil }
Dans ce cas, Connect in D renvoie un pointeur vers C et une erreur, mais l'interface B s'attend à ce que Connect renvoie une implémentation de A et un erreur. Par conséquent, l'erreur indique que la structure D n'implémente pas l'interface B, soulignant l'importance de l'alignement entre les signatures de méthode.
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 résoudre ce problème, assurez-vous que les signatures de méthode dans l'implémentation de la structure correspondent les déclarations de méthode dans l’interface. Dans ce scénario, la méthode Connect en D doit être modifiée pour être conforme à l'interface B :
func (d *D) Connect() (A, error) { c := new(C) return c, nil }
En revanche, si la signature de la méthode dans l'implémentation de la structure diffère de l'interface, la structure n'implémentera pas la interface.
type Equaler interface { Equal(Equaler) bool } type T int func (t T) Equal(u T) bool { // Argument type mismatch return t == u } // does not satisfy Equaler
Dans cet exemple, le type d'argument dans Equal doit correspondre au type d'interface Equaler au lieu d'un type différent, T, pour implémenter correctement l'interface.
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!