Table des matières
2、循环语句" >2、循环语句
2.1 循环处理语句" >2.1 循环处理语句
Chaque cas doit être une communicationToutes les expressions du canal seront évaluées, toutes les expressions envoyées seront évaluées" >Chaque cas doit être une communicationToutes les expressions du canal seront évaluées, toutes les expressions envoyées seront évaluées
Maison développement back-end Golang Quelles sont les instructions de contrôle de flux Golang ?

Quelles sont les instructions de contrôle de flux Golang ?

Dec 28, 2022 pm 05:58 PM
golang go语言 流程控制

Instruction de contrôle de flux : 1. instruction if, composée d'une expression booléenne suivie d'une ou plusieurs instructions ; 2. instruction "if...else", l'expression dans else est exécutée lorsque l'expression booléenne est fausse ; instruction switch, utilisée pour effectuer différentes actions en fonction de différentes conditions ; 4. instruction select ; 5. instruction de boucle for, syntaxe "for k,v := range oldmap{newmap[k]=v}" 6. instruction de contrôle de boucle break , continuez, allez-y.

Quelles sont les instructions de contrôle de flux Golang ?

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

Jetons un coup d'œil au contenu de base des instructions de contrôle de flux Golang.

1. L'instruction de branche conditionnelle

est similaire au langage C. Les instructions conditionnelles associées sont présentées dans le tableau suivant :

Statement Description
if. if l'instruction consiste en une expression booléenne suivie d'une ou plusieurs instructions.
instruction if…else l'instruction if peut être suivie d'une instruction else facultative. L'expression dans l'instruction else est exécutée lorsque l'expression booléenne est fausse.
instruction switch l'instruction switch est utilisée pour effectuer différentes actions en fonction de différentes conditions.
instruction select L'instruction select est similaire à l'instruction switch, mais select exécutera aléatoirement un cas exécutable. S'il n'y a aucun cas à exécuter, il se bloquera jusqu'à ce qu'il y ait un cas à exécuter.
  • instruction if
    La syntaxe est la suivante :
if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
}
Copier après la connexion
  • instruction if-else
if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
} else {
	/* 在布尔表达式为 false 时执行 */
}
Copier après la connexion
  • instruction switch
    Les variables qu'elle contient<span class ="hljs-attribute">v</span> peut être de n'importe quel type, val1 et val2 Il peut s'agir de n'importe quelle valeur du même type, le type n'est pas limité aux constantes ou aux entiers, ou le résultat final est une expression du même type. <span class="hljs-attribute">v</span>可以是任何类型,val1val2可以是同类型的任意值,类型不局限为常量或者整数,或者最终结果为相同类型的表达式。
switch v {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}
Copier après la connexion
  • select语句
    select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收。它将会随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。
select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s);
    /* 你可以定义任意数量的 case */
    default : /* 可选 */
       statement(s);
}
Copier après la connexion

注意:

  • 每个case必须都是一个通信
  • 所有channel表达式都会被求值,所有被发送的表达式都会被求值
  • 如果任意某一个通信都可以,它就执行,其他就忽略
  • 如果有多个case都可以运行,select就会随机挑选一个来执行。
  • 如果没有一个case可以被运行:如果有default子句,就执行default子句,select将被阻塞,直到某个通信可以运行,从而避免饥饿问题。

2、循环语句

2.1 循环处理语句

与多数语言不同的是,Go语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构,关键字 for 的基本使用方法与C语言和 C++ 中非常接近。

go中时使用for实现循环的,共有三种形式:

for key, value := range oldmap {
	newmap[key] = value
}
Copier après la connexion
instruction select select est une structure de contrôle dans Go, similaire à une instruction switch utilisée pour la communication. Chaque cas doit être une opération de communication

语法
和c语言中的for相同for init; condition; post {}
和c语言中的while相同for condition{}
和c语言中的<span class="hljs-function"><span class="hljs-title">for</span><span class="hljs-params">(;;)</span></span>
, soit en envoi, soit en réception. Il exécutera aléatoirement un cas exécutable. S'il n'y a aucun cas à exécuter, il se bloquera jusqu'à ce qu'il y ait un cas à exécuter. Une clause par défaut doit toujours être exécutable.

a := 0
for a<5 {
	fmt.Printf("%d\n", a)
	a++
	if a==2 {
		break;
	}
}
/* output
0
1
2
*/
Copier après la connexion
Copier après la connexion

Remarque :

Chaque cas doit être une communicationToutes les expressions du canal seront évaluées, toutes les expressions envoyées seront évaluées

Si une communication est OK, elle suffit de l'exécuter, ignorez les autresSi plusieurs cas peuvent être exécutés, select en sélectionnera un au hasard à exécuter. Si aucun cas ne peut être exécuté : s'il existe une clause par défaut, la clause par défaut sera exécutée et la sélection sera bloquée jusqu'à ce qu'une certaine communication puisse s'exécuter, évitant ainsi le problème de famine.

2、 Instruction de boucleDifférent de la plupart des langages, les instructions de boucle dans le langage Go ne prennent en charge que le mot-clé for et ne prennent pas en charge les structures while et do-while. L'utilisation de base du mot-clé for est très proche de celle du langage C et C++. . Il existe trois formes d'utilisation de for pour implémenter des boucles en go : la syntaxe

2.1 Instructions de traitement de boucle
🎜🎜🎜 est la même que pour le langage C 🎜🎜pour la condition d'initialisation ; 🎜🎜 est le même que while en langage C 🎜🎜for condition{}🎜🎜🎜🎜 et <span class="hljs-function"><span class=" hljs-title ">for</span><span class="hljs-params">(;;)</span></span>Idem 🎜🎜for{}🎜🎜🎜🎜🎜sauf , la boucle for peut utilisez également directement 🎜range🎜 pour parcourir des tranches, des cartes, des tableaux et des chaînes, etc. Le format est le suivant : 🎜
    // 不使用标记
    fmt.Println("---- continue ---- ")
    for i := 1; i <= 3; i++ {
        fmt.Printf("i: %d\n", i)
            for i2 := 11; i2 <= 13; i2++ {
                fmt.Printf("i2: %d\n", i2)
                continue
            }
    }

/* output
i: 1
i2: 11
i2: 12
i2: 13
i: 2
i2: 11
i2: 12
i2: 13
i: 3
i2: 11
i2: 12
i2: 13
*/

    // 使用标记
    fmt.Println("---- continue label ----")
    re:
        for i := 1; i <= 3; i++ {
            fmt.Printf("i: %d", i)
                for i2 := 11; i2 <= 13; i2++ {
                    fmt.Printf("i2: %d\n", i2)
                    continue re
                }
        }

/* output
i: 1
i2: 11
i: 2
i2: 11
i: 3
i2: 11
*/
Copier après la connexion
Copier après la connexion
🎜🎜🎜🎜2.2 Instruction de contrôle de boucle🎜🎜🎜🎜🎜🎜Instruction de contrôle🎜🎜explication détaillée🎜🎜 🎜 🎜🎜🎜break🎜🎜Interruption hors de la boucle ou instruction switch🎜🎜🎜🎜continue🎜🎜Sautez les instructions restantes de la boucle en cours, puis continuez avec le cycle suivant🎜🎜🎜🎜instruction goto🎜🎜Transférez le contrôle vers le marqué déclaration 🎜🎜🎜🎜

1、break

break主要用于循环语句跳出循环,和c语言中的使用方式是相同的。且在多重循环的时候还可以使用label标出想要break的循环。
实例代码如下:

a := 0
for a<5 {
	fmt.Printf("%d\n", a)
	a++
	if a==2 {
		break;
	}
}
/* output
0
1
2
*/
Copier après la connexion
Copier après la connexion

2、continue

Go 语言的 continue 语句 有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句。在多重循环中,可以用标号 label 标出想 continue 的循环。
实例代码如下:

    // 不使用标记
    fmt.Println("---- continue ---- ")
    for i := 1; i <= 3; i++ {
        fmt.Printf("i: %d\n", i)
            for i2 := 11; i2 <= 13; i2++ {
                fmt.Printf("i2: %d\n", i2)
                continue
            }
    }

/* output
i: 1
i2: 11
i2: 12
i2: 13
i: 2
i2: 11
i2: 12
i2: 13
i: 3
i2: 11
i2: 12
i2: 13
*/

    // 使用标记
    fmt.Println("---- continue label ----")
    re:
        for i := 1; i <= 3; i++ {
            fmt.Printf("i: %d", i)
                for i2 := 11; i2 <= 13; i2++ {
                    fmt.Printf("i2: %d\n", i2)
                    continue re
                }
        }

/* output
i: 1
i2: 11
i: 2
i2: 11
i: 3
i2: 11
*/
Copier après la connexion
Copier après la connexion

3、goto

goto语句主要是无条件转移到过程中指定的行。goto语句通常和条件语句配合使用,可用来实现条件转移、构成循环以及跳出循环体等功能。但是并不主张使用goto语句,以免造成程序流程混乱。
示例代码如下:

var a int = 0
LOOP: for a<5 {
	if a == 2 {
		a = a+1
		goto LOOP
	}
	fmt.Printf("%d\n", a)
	a++
}

/*
output:
0
1
2
3
4
*/
Copier après la connexion

以上代码中的LOOP就是一个标签,当运行到goto语句的时候,此时执行流就会跳转到LOOP标志的哪一行上。

【相关推荐: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.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

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, ...

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 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 ...

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. � ...

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 ...

Pourquoi est-il nécessaire de passer des pointeurs lors de l'utilisation de bibliothèques Go et Viper? Pourquoi est-il nécessaire de passer des pointeurs lors de l'utilisation de bibliothèques Go et Viper? Apr 02, 2025 pm 04:00 PM

GO POINTER SYNTAXE ET ATTENDRE DES PROBLÈMES DANS LA BIBLIOTHÈQUE VIPER Lors de la programmation en langage Go, il est crucial de comprendre la syntaxe et l'utilisation des pointeurs, en particulier dans ...

Comment résoudre le problème des contraintes de type de fonction générique de Golang en cours de suppression automatique dans VSCODE? Comment résoudre le problème des contraintes de type de fonction générique de Golang en cours de suppression automatique dans VSCODE? Apr 02, 2025 pm 02:15 PM

La suppression automatique des contraintes de type de fonction générique Golang dans les utilisateurs de VScode peut rencontrer un problème étrange lors de l'écriture de code Golang à l'aide de VScode. quand...

Pourquoi toutes les valeurs deviennent-elles le dernier élément lors de l'utilisation de la plage dans le langage GO pour traverser les tranches et stocker des cartes? Pourquoi toutes les valeurs deviennent-elles le dernier élément lors de l'utilisation de la plage dans le langage GO pour traverser les tranches et stocker des cartes? Apr 02, 2025 pm 04:09 PM

Pourquoi l'itération de la carte dans GO fait-elle que toutes les valeurs deviennent le dernier élément? En langue go, face à des questions d'entrevue, vous rencontrez souvent des cartes ...

See all articles