Maison >développement back-end >Golang >Fonctions en tant que champs Struct et méthodes Struct : quand utiliser lesquelles dans Go ?

Fonctions en tant que champs Struct et méthodes Struct : quand utiliser lesquelles dans Go ?

DDD
DDDoriginal
2024-10-30 02:05:28365parcourir

 Functions as Struct Fields vs. Struct Methods: When to Use Which in Go?

Fonctions en tant que champs Struct et méthodes Struct

Dans Go, les fonctions peuvent être intégrées en tant que champs dans des structures ou définies comme méthodes de ces structures . Comprendre les distinctions entre ces approches peut optimiser la conception de votre code.

Champs de type de fonction

Les champs de type de fonction ne sont pas de véritables méthodes attachées au type de structure. Elles stockent une référence à une fonction plutôt que de faire partie de l'ensemble de méthodes de la structure.

Méthodes vraies

Les méthodes vraies, déclarées avec le type struct comme récepteur, sont partie intégrante de l'ensemble de méthodes de la structure. Ils permettent d'implémenter des interfaces et d'opérer sur des types concrets. Une fois définies, les méthodes ne peuvent pas être modifiées au moment de l'exécution.

Quand utiliser les champs de type de fonction

  • Pour les rappels, tels que les gestionnaires d'événements ou les gestionnaires de requêtes réseau.
  • Pour imiter les méthodes virtuelles en attribuant une fonction à un champ et en la réaffectant au moment de l'exécution.

Quand utiliser les vraies méthodes

  • Lors de la mise en œuvre d'interfaces
  • Lorsque vous travaillez avec des types concrets et nécessitent un ensemble de méthodes cohérent
  • Lorsque la sécurité est une préoccupation, car les méthodes sont immuables et l'accès aux champs peut potentiellement être falsifié

Exemple

<code class="go">type Foo struct {
    Bar func()
}

func main() {
    f := Foo{
        Bar: func() { fmt.Println("initial") },
    }
    f.Bar()

    f.Bar = func() { fmt.Println("changed") }
    f.Bar()
}</code>

Sortie :

initial
changed

Dans cet exemple, une fonction est intégrée en tant que champ dans la structure Foo. En réaffectant le champ au moment de l'exécution, nous pouvons modifier le comportement de la méthode Bar, démontrant la flexibilité des champs de type fonction.

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