Maison  >  Article  >  développement back-end  >  Comment les expressions de méthode permettent-elles de transmettre des méthodes en tant qu'arguments dans Go ?

Comment les expressions de méthode permettent-elles de transmettre des méthodes en tant qu'arguments dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 11:26:13659parcourir

How Do Method Expressions Enable Passing Methods as Arguments in Go?

Expressions de méthode dans Go

Les expressions de méthode dans Go vous permettent d'appeler une méthode avec un objet personnalisé comme premier argument. Cela peut être utile lorsque vous devez transmettre une action spécifique à une fonction.

Comprendre l'extrait de code

Considérez le code Go suivant :

func main() {
    dog := Dog{}
    b := (*Dog).Bark // method expression
    b(&dog, 5)
}

type Dog struct {}

func (d *Dog) Bark(n int) {
    for i := 0; i < n; i++ {
        fmt.Println("Bark")
    }
}

Dans cet exemple, une expression de méthode est utilisée pour attribuer une fonction à la variable b. L'expression de méthode (*Dog).Bark associe la méthode Bark de type Dog à un récepteur de pointeur (*Dog).

Lorsque b est appelé, la méthode Bark est invoquée avec l'objet dog comme premier argument et 5 comme deuxième argument. La méthode imprime « Bark » sur la console cinq fois.

Avantages des expressions de méthode

  • Les expressions de méthode vous permettent de transmettre une action spécifique aux fonctions, même si l'objet n'est pas connu au moment de la compilation.
  • Ils fournissent un moyen de créer des types de fonctions personnalisés qui peuvent être utilisés avec d'autres types de fonctions d'ordre supérieur. fonctions.

Exemple d'utilisation

Les expressions de méthode peuvent être utilisées dans diverses situations. Par exemple, vous pouvez définir une fonction d'assistance qui prend une expression de méthode et un objet, puis effectue une action basée sur la méthode :

func DoAction(f func(*Dog, int), d *Dog, n int) {
    f(d, n)
}

...

func main() {
    var b func(*Dog, int)
    if (shouldBark) {
        b = (*Dog).Bark
    } else {
        b = (*Dog).Sit
    }
    d := Dog{}
    DoAction(b, &d, 3)
}

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