Maison >développement back-end >Golang >interface d'implémentation de la fonction golang

interface d'implémentation de la fonction golang

PHPz
PHPzoriginal
2023-05-13 11:15:37709parcourir

Golang est un langage de programmation qui a beaucoup attiré l'attention ces dernières années. Ses puissantes capacités de concurrence et sa vitesse d'exécution efficace ont été favorisées par de nombreux développeurs. Dans Golang, l'interface est un concept très important, qui peut nous aider à réaliser le découplage et la flexibilité du code. Cet article explique comment utiliser les fonctions pour implémenter des interfaces.

1. Interface Golang

Dans Golang, une interface est un ensemble de méthodes, qui est une manière contrainte et standardisée. Une interface définit un ensemble de méthodes et est un type abstrait. Chaque méthode est une fonction, implémentée par un type concret. Un type implémente une interface s'il implémente toutes les méthodes définies dans l'interface.

Les interfaces se composent généralement de deux parties : le type d'interface et l'instance d'interface. Le type d'interface définit la signature d'un ensemble de méthodes et n'implémente pas les fonctions de ces méthodes ; l'instance d'interface représente un type spécifique qui implémente ces méthodes.

2. Les fonctions implémentent des interfaces

Dans Golang, les fonctions peuvent également implémenter des interfaces. Nous pouvons définir des fonctions en tant que types puis implémenter les méthodes définies dans l'interface. Ci-dessous, nous utilisons un exemple pour illustrer le processus de mise en œuvre spécifique.

Nous définissons une interface Animal, qui contient deux méthodes : Eat et Move. Le code est le suivant :

type Animal interface {
    Eat(string) string
    Move(string) string
}

Ensuite, nous définissons un type de fonction AnimalFunc. Les paramètres formels et la valeur de retour de ce type sont tous deux de type chaîne. de la fonction correspondent respectivement aux méthodes Eat et Move, le code est le suivant :

type AnimalFunc func(string) string

func (fn AnimalFunc) Eat(food string) string {
    return fn(food + " is eaten")
}

func (fn AnimalFunc) Move(place string) string {
    return fn("moved to " + place)
}

Dans cet exemple, nous définissons le type AnimalFunc comme un type de fonction, et les paramètres formels et la valeur de retour sont tous deux des types de chaîne. Ensuite, nous convertissons le type de fonction AnimalFunc en type d'interface Animal en implémentant les méthodes Eat et Move.

Ci-dessous, nous définissons un type Cat, qui peut renvoyer différentes fonctions manger et déplacer selon différents noms. Le code est le suivant :

type Cat struct {
    name string
}

func (c Cat) Eat(food string) string {
    return fmt.Sprintf("%s eats %s", c.name, food)
}

func (c Cat) Move(place string) string {
    return fmt.Sprintf("%s is moving to %s", c.name, place)
}

func NewCat(name string) Cat {
    return Cat{name}
}

Ici, nous faisons en sorte que le type Cat implémente l'interface Animal en implémentant les méthodes Eat et Move. En parallèle, nous définissons une fonction NewCat pour créer une instance du type Cat.

Enfin, on peut créer une instance de type Animal et appeler ses méthodes Eat et Move, le code est le suivant :

func main() {
    cat := NewCat("Tom")
    var animal Animal = AnimalFunc(cat.Eat)
    fmt.Println(animal.Eat("fish"))
    animal = AnimalFunc(cat.Move)
    fmt.Println(animal.Move("home"))
}

Dans cet exemple, on crée d'abord une instance cat de type Cat, puis on ajoute le eat et déplacez les méthodes de cat. Transmettez-les respectivement aux instances de type AnimalFunc. Enfin, nous convertissons l'instance de type AnimalFunc en une instance de type Animal et appelons ses méthodes Eat et Move.

Grâce à l'exemple ci-dessus, nous pouvons voir que l'implémentation d'interfaces via des fonctions peut très facilement obtenir le découplage et la flexibilité du code. Lorsque nous devons implémenter une interface, nous n'avons pas nécessairement besoin d'utiliser une structure pour l'implémenter. Les fonctions peuvent également faire le travail.

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!

Déclaration:
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