Usando goto e label em Go
Veja o vídeo desse arquivo aqui
goto e label em Go
A instrução goto tem uma má fama que vem do tempo do BASIC quando era usada indiscriminadamente e acabava tornando o código impossível de ler. Em linguagens modernas entretanto é uma instrução perfeitamente válida e desde que usada com critério pode ajudar a tornar seu código mais limpo.
Em Golang de goto as instruções break e continue também aceitam labels, isso é muito útil para quando por exemplo se quer sair de um for aninhado em outro for ou especificar para qual dos fors aninhados se quer fazer continue.
Veja os exemplos de goto e várias outras coisas que aceitam label no nosso Grupo de Estudos de Go
Regras para usar labels
Golang tem algumas regras para usar com goto, continue e break:
- Não se pode saltar para fora de um escopo de função
- Não se pode saltar sobre a declaração de uma variável
- Quando se usa break seguido de um label a instrução imediatamente após o label precisa ser um for, switch, ou select.
- Quando se usa continue seguido de um label a instrução imediatamente após o label precisa ser um for.
É uma instrução valida
Quando se programa em assembly logo se aprende que para a maquina não existem essas abstrações que as linguagens de programação modernas nos oferecem, basicamente a única coisa que se tem são alguns tipos de saltos, o processador simplesmente salta para um determinado endereço de memória e continua executando o código de maquina que esteja armazenado lá.
Quando o compilador transforma o nosso belo código em linguagem de maquina qualquer instrução de salto como if, for, goto, etc. invariavelmente vão virar alguma variação da instrução jmp que dependendo do estado da maquina vai saltar para o endereço indicado na própria instrução ou apenas prosseguir ignorando o salto.
Ignorar um recurso da linguagem é uma escolha do programador mas fazer isso sem um forte alicerce do porque usar ou não usar o recurso é muito ruim.
Eu espero que ninguém tenha sido devorado por velociraptors enquanto lia esse artigo.