Maison  >  Article  >  Qu’est-ce que fn dans le langage go ?

Qu’est-ce que fn dans le langage go ?

小老鼠
小老鼠original
2023-04-17 11:46:512194parcourir

Dans le langage Go, fn fait spécifiquement référence au mot-clé func. Les composants de base d'une fonction sont : le mot-clé func, le nom de la fonction, la liste des paramètres, la valeur de retour, le corps de la fonction et l'instruction return. Chaque programme contient de nombreuses fonctions. Blocs de code de base, les fonctions sont des segments de code organisés et réutilisables utilisés pour implémenter une fonction unique ou associée.

Qu’est-ce que fn dans le langage go ?

Le système d'exploitation de ce tutoriel : système Windows 10, GO version 1.20, ordinateur Dell G3

Déclaration de fonction du langage Go (définition de fonction)

Les fonctions sont organisées, réutilisables et utilisées pour implémenter des extraits de code de fonctions uniques ou associées qui améliorent la modularité des applications et la réutilisation du code. Le langage Go prend en charge les fonctions ordinaires, les fonctions anonymes et les fermetures. Les fonctions sont optimisées et améliorées dès la conception pour rendre les fonctions plus pratiques à utiliser.

La fonction constitue la structure logique de l'exécution du code. Dans le langage Go, les composants de base de la fonction sont : le mot-clé func, le nom de la fonction, la liste des paramètres, la valeur de retour, le corps de la fonction et l'instruction de retour. Chaque programme contient de nombreuses fonctions. de code.

Le langage Go étant un langage compilé, l'ordre dans lequel les fonctions sont écrites n'a pas d'importance. Compte tenu des exigences de lisibilité, il est préférable d'écrire la fonction main() au début du fichier et les autres fonctions sont écrites dedans. un certain ordre logique (comme l'ordre dans lequel les fonctions sont appelées).

L'objectif principal de l'écriture de plusieurs fonctions est de décomposer un problème complexe qui nécessite de nombreuses lignes de code en une série de tâches simples à résoudre. De plus, la même tâche (fonction) peut être appelée plusieurs fois, ce qui facilite la réutilisation du code (fait). Surtout, les bons programmes accordent une grande attention au principe DRY, c'est-à-dire Don't Repeat Yourself (Don't Repeat Yourself), ce qui signifie que le code qui exécute une tâche spécifique ne peut apparaître qu'une seule fois dans le programme).

La fonction se terminera lorsqu'elle atteindra la dernière ligne du bloc de code ou avant l'instruction return. L'instruction return peut avoir zéro ou plusieurs paramètres. Ces paramètres seront utilisés comme valeurs de retour pour l'appelant. peut également être utilisé pour terminer la boucle infinie de for ou terminer une goroutine.

Les fonctions du langage Go n'ont pas besoin d'être déclarées

Les fonctions du langage Go sont des citoyens de premier ordre Comme les variables, elles peuvent être affectées à une certaine variable (raison de l'émergence des fonctions anonymes)

Puisque les fonctions sont. citoyens de première classe, ils doivent être définis avant Tous les formats de variables peuvent être utilisés pour définir des variables de type fonction

    var 变量名称 函数类型
    var 变量名称 函数类型 = 匿名函数
    var 变量名称  = 匿名函数
    变量名称  := 匿名函数
    var(
        var 变量名称  = 匿名函数
    )
fn = func (a,b int){
    return a + b
}
fn()

La façon dont les variables de fonction sont définies dans le langage Go est différente du langage C

Format : nom de la fonction func (paramètre formel list) liste de valeurs de retour {}

Go La valeur de retour de la fonction dans le langage peut être supérieure à une

func test(a,b int) (a,b int){
    return a,b
}

La valeur de retour de la fonction du langage Go ne peut écrire que le type, ou vous pouvez écrire la variable + type

Seulement écrivez le type : func test(a,b int) (int){} Remarque : écrivez uniquement le type, les parenthèses des deux côtés de la valeur de retour type int peuvent être omises

Variable plus type : func test(a,b int ) (a,b int){}
Remarque : lors de l'écriture du formulaire variable + type, il n'est pas nécessaire d'ajouter return. La valeur de retour recherchera automatiquement a et b dans le bloc de code

func test(a,b int) (a,b int){
      a = 100
      b = 99
      return //自动返回100,99}

Si les types du La liste des paramètres formels du langage Go ou la liste des valeurs de retour sont les mêmes, nous pouvons alors les définir en continu
comme suit : deux fonctions représentent la même méthode

func test(a,b int) (a,b int){return a,b}
func test2(a int,b int) (int,int){return a,b}

En raison du langage Go, les fonctions peuvent avoir plusieurs valeurs de retour, donc lorsque le monde extérieur reçoit plusieurs valeurs de retour d'une fonction, plusieurs variables doivent être utilisées pour les recevoir. Cependant, si les variables ne sont pas utilisées dans le langage Go, une erreur sera signalée, donc si nous avons une valeur de retour qui n'a pas besoin de l'être. utilisé, nous utiliserons _ pour recevoir, _ a une signification spécifique dans le langage Go, il ne peut donc pas être utilisé comme identifiant d'une variable

Fonction anonyme

La fonction anonyme est une fonction sans nom. être utilisé immédiatement après la définition, sinon une erreur sera signalée

Les fonctions anonymes ne sont généralement utilisées qu'une seule fois. Puisqu'elles sont des citoyens de première classe, elles peuvent être utilisées comme paramètres formels de la fonction ou comme valeur de retour de la fonction

. En tant que paramètres formels de la fonction

fn  := func (a,b int) int {
  return a + b
}

//此时调用test函数用来计算a+b可以这么写
res := test(a,b,fn)

func test(a,b int,method func(int,int) int) func() {
  return method(a,b)
}

Évolution ultérieure

Depuis fn et sont des affectations de fonctions anonymes, nous pouvons directement passer la fonction anonyme dans test

//此时调用test函数用来计算a+b可以这么写
res := test(a,b,func (a,b int) int {
  return a + b
})

func test(a,b int,method func(int,int) int) func() {
  return method(a,b)
}

comme valeur de retour de la fonction

fn := test()
fn()//打印匿名函数

func test() func() {
    return func() {
        fmt.Println("匿名函数")
    }
}

Closure (fonction anonyme spéciale )

Si la fonction anonyme renvoyée utilise des variables externes, cela s'appelle une fermeture

Fermé Caractéristiques du package : "Les gens sont dans la tour" Tant que des variables externes sont utilisées dans la fonction anonyme renvoyée, s'il s'agit de la fonction anonyme. est toujours utilisée après l'appel de fonction, la pile de fonctions ne sera pas libérée. Une fois qu'elle n'est plus utilisée, la pile de fonctions ne sera pas libérée

fn := test()//test函数也被称为迭代器
fn()  //2
fn()  //3
fn()  //4

func test() func(){
     x := 1
     return func (){
            x++
            println(x)
        }
}

Les performances mémoire des fonctions anonymes

Qu’est-ce que fn dans le langage go ?

Illustration.

  1. La zone de code stocke les codes de trois fonctions, correspondant à une adresse

  2. Définissez la variable fn et transmettez l'adresse de la fonction anonyme à fn

  3. Appelez test de fonction pour ouvrir de l'espace de stockage

  4. pour ouvrir un espace de stockage pour num, valeur, méthode, res, dans quelle méthode enregistre l'adresse de la fonction qui lui est transmise

  5. exécute la fonction et la méthode enregistre la fonction anonyme Lorsque la méthode est exécutée, le stockage L'espace est ouvert et les valeurs de a et b sont stockées une fois la fonction terminée, la valeur est renvoyée à res et l'espace de stockage de la méthode est libéré

    .
  6. res est imprimé, la fonction de test est également libérée et fn est également libéré après utilisation

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