Menu
Coddy logo textTech

A Instrução `goto`

Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 4 de 68.

A instrução goto em Go permite transferir o controle diretamente para uma instrução rotulada dentro da mesma função. Embora o Go inclua esse recurso, ele é raramente usado na programação Go moderna porque estruturas de controle mais claras, como loops e instruções if, são preferidas.

Para usar goto, você primeiro define um rótulo escrevendo um identificador seguido por dois pontos. Então você pode pular para esse rótulo usando goto seguido pelo nome do rótulo.

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

Neste exemplo, o programa salta de volta para o rótulo start até que a condição não seja mais atendida. No entanto, essa mesma lógica seria muito mais clara usando um laço for. A instrução goto pode tornar o código mais difícil de ler e manter, e é por isso que geralmente é desencorajada em favor do fluxo de controle estruturado.

challenge icon

Desafio

Fácil

Neste desafio, você praticará o uso da instrução goto para criar um mecanismo simples de nova tentativa. Você está criando um sistema de conexão que tenta estabelecer uma conexão e faz novas tentativas um número específico de vezes caso falhe.

Você receberá duas entradas:

  • Uma string que representa o número máximo de tentativas (por exemplo, "3")
  • Uma string que representa o número da tentativa que terá sucesso (por exemplo, "2")

Sua tarefa é:

  1. Interpretar o número máximo de tentativas a partir da primeira entrada
  2. Interpretar o número da tentativa bem-sucedida a partir da segunda entrada
  3. Usar uma instrução goto com um rótulo para implementar a lógica de novas tentativas
  4. Começar com o número da tentativa igual a 1 e incrementá-lo após cada tentativa malsucedida
  5. Para cada tentativa que falhar, imprimir "Attempt [attempt_number] failed"
  6. Quando o número da tentativa corresponder ao número da tentativa bem-sucedida, imprimir "Attempt [attempt_number] succeeded" e sair
  7. Se você exceder o número máximo de tentativas sem obter sucesso, imprimir "All attempts failed" e sair

Use a instrução goto para voltar ao rótulo de nova tentativa quando uma tentativa falhar e você não tiver excedido o número máximo de tentativas. Os números das tentativas devem começar em 1.

Experimente você mesmo

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Ler entrada
    var maxRetriesStr string
    var successAttemptStr string
    fmt.Scanln(&maxRetriesStr)
    fmt.Scanln(&successAttemptStr)
    
    // Converter entradas para inteiros
    maxRetries, _ := strconv.Atoi(maxRetriesStr)
    successAttempt, _ := strconv.Atoi(successAttemptStr)
    
    // Inicializar contador de tentativas
    attempt := 1
    
    // TODO: Escreva seu código abaixo
    // Use a instrução goto com um rótulo para implementar a lógica de nova tentativa
    
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de Go online