Table des matières
Déclaration de fonction ordinaire (définition)
Fonction d'appel
La valeur de retour de la fonction
其它编程语言中函数的返回值
1) 同一种类型返回值
2) 带有变量名的返回值
提示
Maison développement back-end Golang Quelle est la méthode d'appel des fonctions en langage Go ?

Quelle est la méthode d'appel des fonctions en langage Go ?

Dec 01, 2022 pm 07:32 PM
go golang go语言

Dans le langage Go, après avoir défini une fonction, on peut appeler la fonction via "nom de fonction ()", la syntaxe est "liste de variables de valeur de retour = nom de fonction (liste de paramètres)". Lorsque "()" contient plusieurs paramètres, les variables de paramètres sont séparées par des virgules et n'ont pas besoin de se terminer par un point-virgule ; dans la "liste des variables de valeur de retour", plusieurs valeurs de retour sont séparées par des virgules.

Quelle est la méthode d'appel des fonctions en langage Go ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

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 doivent être é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. L'instruction peut également être utilisée pour terminer la boucle infinie de for ou mettre fin à une goroutine.

Il existe trois types de fonctions dans le langage Go :

  • Fonctions ordinaires avec des noms
  • Fonctions anonymes ou fonctions lambda
  • Méthodes

Déclaration de fonction ordinaire (définition)

La déclaration de fonction inclut le nom de la fonction, formel liste de paramètres, liste de valeurs de retour (peut être omise) et corps de fonction.

func 函数名(形式参数列表)(返回值列表){
    函数体
}
Copier après la connexion

La liste formelle des paramètres décrit le nom du paramètre et le type de paramètre de la fonction. Ces paramètres sont utilisés comme variables locales et leurs valeurs sont fournies par l'appelant du paramètre. La liste des valeurs de retour décrit le nom de la variable et le type de la fonction. valeur de retour de la fonction. Si la fonction renvoie une variable sans nom ou s'il n'y a pas de valeur de retour et que les parenthèses dans la liste des valeurs de retour peuvent être omises.

Fonction d'appel

Une fois la fonction définie, le code actuel peut accéder à la fonction appelée pour exécution en l'appelant. Les variables locales de la fonction avant l'appel seront enregistrées et ne seront pas perdues après la fonction. est terminé, l'exécution du code reprend sur la ligne suivante de la fonction appelante et les variables locales précédentes peuvent également continuer à être accessibles.

Les variables locales au sein d'une fonction ne peuvent être utilisées que dans le corps de la fonction. Une fois l'appel de la fonction terminé, ces variables locales seront libérées et invalides.

Le format d'appel de fonction du langage Go est le suivant :

返回值变量列表 := 函数名(参数列表)
Copier après la connexion

Ce qui suit est une description de chaque partie :

  • Nom de la fonction : le nom de la fonction qui doit être appelée.
  • Liste des paramètres : les variables de paramètres sont séparées par des virgules et n'ont pas besoin de se terminer par un point-virgule.
  • Liste des variables de valeur de retour : plusieurs valeurs de retour sont séparées par des virgules.

Par exemple, le style d'appel de la fonction d'addition est le suivant :

result := add(1,1)
Copier après la connexion

La valeur de retour de la fonction

Le langage Go prend en charge plusieurs valeurs de retour. Plusieurs valeurs de retour peuvent facilement obtenir plusieurs paramètres de retour après l'exécution de la fonction. Le langage Go utilise souvent plusieurs Le dernier paramètre de retour dans la valeur de retour renvoie les erreurs qui peuvent survenir lors de l'exécution de la fonction. L'exemple de code est le suivant :

conn, err := connectToNetwork()
Copier après la connexion
Copier après la connexion
conn, err := connectToNetwork()
Copier après la connexion
Copier après la connexion
.

在这段代码中,connectToNetwork 返回两个参数,conn 表示连接对象,err 返回错误信息。

其它编程语言中函数的返回值

  • C/C++ 语言中只支持一个返回值,在需要返回多个数值时,则需要使用结构体返回结果,或者在参数中使用指针变量,然后在函数内部修改外部传入的变量值,实现返回计算结果,C++ 语言中为了安全性,建议在参数返回数据时使用“引用”替代指针。
  • C# 语言也没有多返回值特性,C# 语言后期加入的 ref 和 out 关键字能够通过函数的调用参数获得函数体中修改的数据。
  • lua 语言没有指针,但支持多返回值,在大块数据使用时方便很多。

Go语言既支持安全指针,也支持多返回值,因此在使用函数进行逻辑编写时更为方便。

1) 同一种类型返回值

如果返回值是同一种类型,则用括号将多个返回值类型括起来,用逗号分隔每个返回值的类型。

使用 return 语句返回时,值列表的顺序需要与函数声明的返回值类型一致,示例代码如下:

func typedTwoValues() (int, int) {
    return 1, 2
}
func main() {
    a, b := typedTwoValues()
    fmt.Println(a, b)
}
Copier après la connexion
Copier après la connexion
func typedTwoValues() (int, int) {
    return 1, 2
}
func main() {
    a, b := typedTwoValues()
    fmt.Println(a, b)
}
Copier après la connexion
Copier après la connexion

代码输出结果:

1 2
Copier après la connexion

纯类型的返回值对于代码可读性不是很友好,特别是在同类型的返回值出现时,无法区分每个返回参数的意义。

2) 带有变量名的返回值

Go语言支持对返回值进行命名,这样返回值就和参数一样拥有参数变量名和类型。

命名的返回值变量的默认值为类型的默认值,即数值为 0,字符串为空字符串,布尔为 false、指针为 nil 等。

下面代码中的函数拥有两个整型返回值,函数声明时将返回值命名为 a 和 b,因此可以在函数体中直接对函数返回值进行赋值,在命名的返回值方式的函数体中,在函数结束前需要显式地使用 return 语句进行返回,代码如下:

func namedRetValues() (a, b int) {
    a = 1
    b = 2
    return
}
Copier après la connexion
func namedRetValues() (a, b int) {

    a = 1
    b = 2

    return
}
Copier après la connexion

代码说明如下:

  • 第 1 行,对两个整型返回值进行命名,分别为 a 和 b。
  • 第 3 行和第 4 行,命名返回值的变量与这个函数的布局变量的效果一致,可以对返回值进行赋值和值获取。
  • 第 6 行,当函数使用命名返回值时,可以在 return 中不填写返回值列表,如果填写也是可行的,下面代码的执行效果和上面代码的效果一样。
    func namedRetValues() (a, b int) {
        a = 1
        return a, 2
    }
    Copier après la connexion
    func namedRetValues() (a, b int) {
        a = 1
    
        return a, 2
    }
    Copier après la connexion

提示

同一种类型返回值和命名返回值两种形式只能二选一,混用时将会发生编译错误,例如下面的代码:

func namedRetValues() (a, b int, int)
Copier après la connexion
Copier après la connexion
func namedRetValues() (a, b int, int)
Copier après la connexion
Copier après la connexion

编译报错提示:

mixed named and unnamed function parameters
Copier après la connexion

意思是:在函数参数中混合使用了命名和非命名参数。

【相关推荐:Go视频教程

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Apr 02, 2025 pm 02:06 PM

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Apr 02, 2025 pm 04:54 PM

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Apr 02, 2025 pm 02:03 PM

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Apr 02, 2025 pm 05:09 PM

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Apr 02, 2025 pm 12:57 PM

Deux façons de définir les structures dans le langage GO: la différence entre les mots clés VAR et le type. Lorsque vous définissez des structures, GO Language voit souvent deux façons d'écrire différentes: d'abord ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Apr 02, 2025 pm 04:12 PM

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Comment s'assurer que la concurrence est sûre et efficace lors de la rédaction de journaux multi-processus? Comment s'assurer que la concurrence est sûre et efficace lors de la rédaction de journaux multi-processus? Apr 02, 2025 pm 03:51 PM

Gérez efficacement les problèmes de sécurité de la concurrence dans la rédaction de journaux multiproces. Plusieurs processus écrivent le même fichier journal en même temps. Comment s'assurer que la concurrence est sûre et efficace? C'est un ...

See all articles