L'istruzione `goto`
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 4 di 68.
L'istruzione goto in Go consente di trasferire il controllo direttamente a un'istruzione etichettata all'interno della stessa funzione. Sebbene Go includa questa funzionalità, viene usata raramente nella programmazione Go moderna, perché si preferiscono strutture di controllo più chiare, come i cicli e le istruzioni if.
Per usare goto, prima definisci un'etichetta scrivendo un identificatore seguito da due punti. Poi puoi saltare a quell'etichetta usando goto seguito dal nome dell'etichetta.
func main() {
i := 0
start:
fmt.Println("Count:", i)
i++
if i < 3 {
goto start
}
fmt.Println("Done!")
}In questo esempio, il programma torna all'etichetta start finché la condizione non è più soddisfatta. Tuttavia, questa stessa logica sarebbe molto più chiara usando un ciclo for. L'istruzione goto può rendere il codice più difficile da leggere e mantenere, perciò in genere è sconsigliata a favore del flusso di controllo strutturato.
Sfida
FacileIn questa sfida, ti eserciterai a usare l'istruzione goto per creare un semplice meccanismo di ripetizione dei tentativi. Stai realizzando un sistema di connessione che prova a stabilire una connessione e riprova un numero specifico di volte se non ci riesce.
Riceverai due input:
- Una stringa che rappresenta il numero massimo di tentativi (ad esempio,
"3") - Una stringa che rappresenta il numero del tentativo che avrà successo (ad esempio,
"2")
Il tuo compito è:
- Convertire il numero massimo di tentativi dal primo input
- Convertire il numero del tentativo riuscito dal secondo input
- Usare un'istruzione
gotocon un'etichetta per implementare la logica dei tentativi - Iniziare con il tentativo numero 1 e incrementare il numero dopo ogni tentativo fallito
- Per ogni tentativo non riuscito, stampare
"Attempt [attempt_number] failed" - Quando il numero del tentativo corrisponde al numero del tentativo riuscito, stampare
"Attempt [attempt_number] succeeded"e uscire - Se superi il numero massimo di tentativi senza riuscire, stampare
"All attempts failed"e uscire
Usa l'istruzione goto per tornare all'etichetta di ripetizione quando un tentativo non riesce e non hai superato il numero massimo di tentativi. I numeri dei tentativi devono iniziare da 1.
Provalo tu
package main
import (
"fmt"
"strconv"
)
func main() {
// Leggi l'input
var maxRetriesStr string
var successAttemptStr string
fmt.Scanln(&maxRetriesStr)
fmt.Scanln(&successAttemptStr)
// Converti gli input in numeri interi
maxRetries, _ := strconv.Atoi(maxRetriesStr)
successAttempt, _ := strconv.Atoi(successAttemptStr)
// Inizializza il contatore dei tentativi
attempt := 1
// TODO: Scrivi il tuo codice qui sotto
// Usa l'istruzione goto con un'etichetta per implementare la logica dei tentativi
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamentiEsercitati da solo: Compilatore Go online