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.

quiz iconTeste seus conhecimentos

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

quiz iconTeste seus conhecimentos

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

quiz iconTeste seus conhecimentos

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

challenge icon

Desafio

Fácil

Neste desafio, você praticará o uso da instrução goto para criar um mecanismo simples de repetição (retry). Você está construindo um sistema de conexão que tenta estabelecer uma conexão e repete um número específico de vezes caso falhe.

Você receberá duas entradas:

  • Uma string representando o número máximo de tentativas de repetição (ex: "3")
  • Uma string representando o número da tentativa que terá sucesso (ex: "2")

Sua tarefa é:

  1. Analisar (parse) o número máximo de tentativas da primeira entrada
  2. Analisar (parse) o número da tentativa de sucesso da segunda entrada
  3. Usar uma instrução goto com um rótulo (label) para implementar a lógica de repetição
  4. Começar com a tentativa número 1 e incrementar após cada tentativa falha
  5. Para cada tentativa que falhar, imprimir "Attempt [attempt_number] failed"
  6. Quando o número da tentativa corresponder ao número da tentativa de sucesso, imprimir "Attempt [attempt_number] succeeded" e sair
  7. Se você exceder o número máximo de tentativas sem sucesso, imprimir "All attempts failed" e sair

Use a instrução goto para saltar de volta para o rótulo de repetição 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.

Folha de consulta

A instrução goto transfere o controle diretamente para uma instrução rotulada dentro da mesma função. Defina um rótulo com um identificador seguido por dois pontos e, em seguida, salte para ele usando goto:

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

Embora o goto esteja disponível em Go, ele é raramente usado na programação Go moderna, pois o fluxo de controle estruturado, como loops e instruções if, é mais claro e fácil de manter.

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