Je veux qu'un ensemble de code soit exécuté jusqu'à ce que l'utilisateur veuille explicitement quitter la fonction. Par exemple: lorsqu'un utilisateur exécute le programme, il verra 2 options:
ceci sera réalisé en utilisant une structure de boîtier d'interrupteur. Ici, si l'utilisateur appuie sur 1, l'ensemble des fonctions associées à 1 s'exécutera et si l'utilisateur appuiera sur 2, le programme se terminera. Comment dois-je réaliser ce scénario dans Golang? En Java, je pense que cela pourrait être fait en utilisant la structure do While, mais go ne prend pas en charge la boucle Do While. Voici mon code que j'ai essayé mais cela va dans une boucle infinie:
func sample() {
var i = 1
for i > 0 {
fmt.Println("Press 1 to run")
fmt.Println("Press 2 to exit")
var input string
inpt, _ := fmt.Scanln(&input)
switch inpt {
case 1:
fmt.Println("hi")
case 2:
os.Exit(2)
default:
fmt.Println("def")
}
}
}
Le programme, quelle que soit l’entrée, n’imprime que "hi". Quelqu'un pourrait-il me corriger s'il vous plaît ce que je fais ici?
Merci.
Lorsque cette question a été posée, il s'agissait d'une meilleure réponse pour ce scénario spécifique (je ne savais pas que ce serait le premier résultat lors de la recherche par Google de "do while loop golang"). Pour répondre à cette question de manière générique, veuillez consulter la réponse de @ LinearZoetrope ci-dessous .
Enveloppez votre fonction dans une boucle for:
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("Press 1 to run")
fmt.Println("Press 2 to exit")
for {
sample()
}
}
func sample() {
var input int
n, err := fmt.Scanln(&input)
if n < 1 || err != nil {
fmt.Println("invalid input")
return
}
switch input {
case 1:
fmt.Println("hi")
case 2:
os.Exit(2)
default:
fmt.Println("def")
}
}
Une boucle for
sans déclaration équivaut à une boucle while
dans d'autres langages de type C. Consultez la documentation Effective Go qui couvre la boucle for
.
Un do..while
peut être plus directement émulé dans Go avec une boucle for à l'aide d'une variable de boucle bool
dotée de true
.
for ok := true; ok; ok = EXPR { }
est plus ou moins directement équivalent à
do { } while(EXPR)
Donc dans votre cas:
var input int
for ok := true; ok; ok = (input != 2) {
n, err := fmt.Scanln(&input)
if n < 1 || err != nil {
fmt.Println("invalid input")
break
}
switch input {
case 1:
fmt.Println("hi")
case 2:
// Do nothing (we want to exit the loop)
// In a real program this could be cleanup
default:
fmt.Println("def")
}
}
Edit: Playground (avec un Stdin modifié)
Certes, dans ce cas, il est probablement plus clair d'appeler explicitement (étiqueté) break
, return
ou os.Exit
dans la boucle.
Le do ... pendant le go peut être ça:
func main() {
var value int
for {
value++
fmt.Println(value)
if value%6 != 0 {
break
}
}
}
une boucle while
dans Go peut être aussi simple que cela:
package main
import `fmt`
func main() {
for {
var number float64
fmt.Print(`insert an Integer eq or gr than 10!!!`)
fmt.Scanf(`%f`, &number)
if number >= 10 { break }
fmt.Println(`sorry the number is lower than 10....type again!!!`)
}
Considez à utiliser "pour-pause" comme "do-while".
foo.go
package main
import (
"fmt"
)
func main() {
i := 0
for {
i++
if i > 10 {
break
}
fmt.Printf("%v ", i)
}
fmt.Println()
}
Coquille
$ go run foo.go
1 2 3 4 5 6 7 8 9 10
Peut-être pas ce que vous cherchez, mais si vous essayez de faire quelque chose comme ça:
int i = 0;
while (i < 10) {
cout << "incrementing i now" << endl;
i++
}
cout << "done"
Vous devrez faire quelque chose comme ça au rendez-vous:
var i = 0
fmt.Println(i)
for {
if i < 10 {
fmt.Println("incrementing i now")
i++
} else {
break
}
}
fmt.Println("done")