Maison > développement back-end > Golang > Une structure Go implémente-t-elle une interface si un paramètre de méthode implémente cette interface ?

Une structure Go implémente-t-elle une interface si un paramètre de méthode implémente cette interface ?

Susan Sarandon
Libérer: 2024-12-09 02:46:08
original
573 Les gens l'ont consulté

Does a Go Struct Implement an Interface If a Method Parameter Implements That Interface?

La structure n'implémente pas l'interface si son paramètre de méthode implémente l'interface

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)
}
Copier après la connexion

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)
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal