Menu
Coddy logo textTech

La sentencia `goto`

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 4 de 68.

La sentencia goto en Go permite transferir el control directamente a una sentencia etiquetada dentro de la misma función. Aunque Go incluye esta característica, rara vez se utiliza en la programación moderna de Go porque se prefieren estructuras de control más claras como los bucles y las sentencias if.

Para usar goto, primero defines una etiqueta escribiendo un identificador seguido de dos puntos. Luego puedes saltar a esa etiqueta usando goto seguido del nombre de la etiqueta.

func main() {
    i := 0
start:
    fmt.Println("Count:", i)
    i++
    if i < 3 {
        goto start
    }
    fmt.Println("Done!")
}

En este ejemplo, el programa salta de nuevo a la etiqueta start hasta que la condición ya no se cumpla. Sin embargo, esta misma lógica sería mucho más clara utilizando un bucle for. La sentencia goto puede hacer que el código sea más difícil de leer y mantener, razón por la cual generalmente se desaconseja en favor del flujo de control estructurado.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

En este desafío, practicarás el uso de la sentencia goto para crear un mecanismo de reintento simple. Estás construyendo un sistema de conexión que intenta establecer una conexión y reintenta un número específico de veces si falla.

Recibirás dos entradas:

  • Una cadena que representa el número máximo de intentos de reintento (por ejemplo, "3")
  • Una cadena que representa el número de intento que tendrá éxito (por ejemplo, "2")

Tu tarea es:

  1. Analizar el número máximo de intentos de reintento de la primera entrada
  2. Analizar el número de intento de éxito de la segunda entrada
  3. Usar una sentencia goto con una etiqueta para implementar la lógica de reintento
  4. Comenzar con el número de intento 1 e incrementar después de cada intento fallido
  5. Para cada intento que falle, imprimir "Attempt [attempt_number] failed"
  6. Cuando el número de intento coincida con el número de intento de éxito, imprimir "Attempt [attempt_number] succeeded" y salir
  7. Si excedes el número máximo de intentos de reintento sin éxito, imprimir "All attempts failed" y salir

Usa la sentencia goto para saltar de regreso a la etiqueta de reintento cuando un intento falle y no hayas excedido el número máximo de intentos. Los números de intento deben comenzar desde 1.

Hoja de referencia

La sentencia goto transfiere el control directamente a una sentencia etiquetada dentro de la misma función. Define una etiqueta con un identificador seguido de dos puntos, luego salta a ella usando goto:

func main() {
    i := 0
start:
    fmt.Println("Count:", i)
    i++
    if i < 3 {
        goto start
    }
    fmt.Println("Done!")
}

Aunque goto está disponible en Go, rara vez se utiliza en la programación moderna de Go, ya que el flujo de control estructurado, como los bucles y las sentencias if, son más claros y fáciles de mantener.

Pruébalo tú mismo

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Leer entrada
    var maxRetriesStr string
    var successAttemptStr string
    fmt.Scanln(&maxRetriesStr)
    fmt.Scanln(&successAttemptStr)
    
    // Convertir entradas a enteros
    maxRetries, _ := strconv.Atoi(maxRetriesStr)
    successAttempt, _ := strconv.Atoi(successAttemptStr)
    
    // Inicializar contador de intentos
    attempt := 1
    
    // TODO: Escribe tu código a continuación
    // Usa la sentencia goto con una etiqueta para implementar la lógica de reintento
    
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo