Maison  >  Article  >  développement back-end  >  Des classes imbriquées peuvent-elles exister dans des fonctions dans Golang ?

Des classes imbriquées peuvent-elles exister dans des fonctions dans Golang ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 14:56:02404parcourir

Can Nested Classes Exist Within Functions in Golang?

Des classes imbriquées peuvent-elles exister dans des fonctions dans Golang ?

Golang autorise l'imbrication de structures dans des fonctions, mais pas de fonctions dans d'autres fonctions (à l'exclusion fonctions lambda). Cette limitation soulève la question de savoir s'il est possible de définir des classes imbriquées au sein de fonctions dans Golang.

Considérons l'exemple suivant :

<code class="go">func f() {
    // Nested struct Cls within f
    type Cls struct {
        // ...
    }

    // Attempt to bind foo to Cls fails
    func (c *Cls) foo() {
        // ...
    }
}</code>

Dans ce cas, la tentative de lier la fonction foo à la classe imbriquée Cls échouera. Cela peut paraître surprenant, étant donné que les classes ne sont pas diminuées à l'intérieur des fonctions.

Les littéraux de fonction à la rescousse

Bien que l'imbrication de fonctions dans d'autres fonctions ne soit pas autorisée dans Golang, il y a est une solution de contournement utilisant des littéraux de fonction :

<code class="go">func f() {
    foo := func(s string) {
        fmt.Println(s)
    }

    foo("Hello World!")
}</code>

Ici, nous créons une variable foo de type function, qui est déclarée dans une autre fonction f. L'appel de la fonction "externe" f produit : "Hello World!" comme prévu.

Cette solution nous permet d'obtenir un comportement similaire aux classes imbriquées dans les fonctions, bien qu'en utilisant un mécanisme différent.

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