A instrução GO TO transfere o controle de execução do programa diretamente para outro ponto da PROCEDURE DIVISION, sendo considerada uma estrutura de desvio incondicional ou condicional.

Apesar de ser suportada em COBOL, o uso excessivo de GO TO não é recomendado, pois pode dificultar a leitura e manutenção do programa. Em seu lugar, sempre que possível, deve-se utilizar PERFORM, EVALUATE ou IF.

📌 Para que serve

  • Redirecionar a execução para outro parágrafo ou seção.

  • Implementar lógica condicional baseada em índices (em versão DEPENDING ON).

  • Utilizado em estruturas antigas ou programas legado.

🧾 Tipos de GO TO

✅ GO TO Incondicional

Transfere o controle diretamente para um parágrafo ou seção:

GO TO NOMEPARAGRAFO.

✅ GO TO Condicional (DEPENDING ON)

Transfere o controle para um dos parágrafos listados, com base no valor de uma variável numérica:

GO TO PARAG1, PARAG2, PARAG3 DEPENDING ON INDICE.
  • Se INDICE = 1, vai para PARAG1

  • Se INDICE = 2, vai para PARAG2

  • Se INDICE = 3, vai para PARAG3

  • Se INDICE estiver fora do intervalo, segue o fluxo normalmente

⚠️ GO TO Alterado (com ALTER)

O GO TO pode ser modificado dinamicamente com a instrução ALTER. Prática altamente desencorajada, pois prejudica a estrutura do programa.

PARAG-1. GO TO PARAG-DESTINO.

ALTER PARAG-1 TO PROCEED TO PARAG-ALTERNATIVO.

Evite ao máximo essa abordagem — substitua por EVALUATE ou PERFORM.

⚠️ Regras e restrições

Tipo Observações
Incondicional Desvia diretamente para outro ponto. Evite se possível.
Condicional Avalia um índice numérico e desvia para uma das opções.
Alterado (ALTER) Reconfigura o destino de um GO TO dinamicamente. Evite completamente.
RECURSIVE O GO TO alterado não pode ser usado em programas recursivos.
THREAD Também proibido em programas compilados com suporte a múltiplos threads.

 

🔍 Exemplo prático

Exemplo com GO TO DEPENDING ON

WORKING-STORAGE SECTION.
01 INDICE PIC 9(01).

PROCEDURE DIVISION.
    MOVE 2 TO INDICE.
    GO TO OPCAO1, OPCAO2, OPCAO3 DEPENDING ON INDICE.
    DISPLAY "Fim do programa".
    STOP RUN.

OPCAO1.
    DISPLAY "Opção 1".
    STOP RUN.

OPCAO2.
    DISPLAY "Opção 2".
    STOP RUN.

OPCAO3.
    DISPLAY "Opção 3".
    STOP RUN.

❗ Recomendações

  • Prefira PERFORM para controle de fluxo estruturado.

  • Use EVALUATE em decisões múltiplas.

  • Reserve o GO TO apenas para situações muito específicas ou para manter compatibilidade com código legado.

 

✅ Conclusão

O comando GO TO permite alterar o fluxo de execução de forma direta, mas deve ser usado com extrema cautela. Embora tenha sido amplamente utilizado em programas COBOL mais antigos, sua utilização hoje é desaconselhada em favor de práticas estruturadas que facilitam a manutenção e compreensão do código.