Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Golang básico - Controle de Fluxo - Complemento
Bruno Gomes
Bruno Gomes

Posted on

     

Golang básico - Controle de Fluxo - Complemento

Esse post faz parte de uma série onde pretendo compartilhar o básico essencial para desenvolver com GoLang.
Esse em particular é um complemento doGolang básico - Controle de Fluxo

Agora que já vimos como utilizarIF,SWITCH eFOR vamos ver algumas palavras reservadas do Go que são utilizadas para interromper ou acelerar a iteração do código.

continue

A palavra reservadacontinue é específica para ser utilizada comfor, e serve para pular para a próxima iteração:

funcmain(){produtos:=[]produto{{nome:"Produto Final",cor:verde,status:publicado,criado:time.Now(),},{nome:"Produto Teste",cor:verde,status:rascunho,criado:time.Now(),},}for_,p:=rangeprodutos{ifp.status==publicado{continue}fmt.Println(p)}}
Enter fullscreen modeExit fullscreen mode

Executando esse código verá que somente oProduto Teste é impresso nofor.

break

Essa palavra reservada pode ser utilizada emfor,switch eselect. E ela serve para interromper a iteração do bloco e seguir para próxima instrução do código.

// nesse for nenhum produto será impressofor_,p:=rangeprodutos{ifp.status==publicado{break}fmt.Println(p)}fmt.Println("Loop terminado")
Enter fullscreen modeExit fullscreen mode
p:=produto{nome:"Produto Teste",cor:verde,status:rascunho,criado:time.Now(),}// nenhum case será executadoswitchp.status{casepublicado:fmt.Println("bloco publicado",p)caserascunho:ifp.cor==verde{break}fmt.Println("bloco rascunho",p)casecongelado:fmt.Println("bloco congelado",p)}fmt.Println("switch terminado")
Enter fullscreen modeExit fullscreen mode

fallthrough

Essa é específica para ser utilizada comswitch, em Go cadacase doswitch é exclusivo. Diferente de outras linguagens que caso precise ser exclusivo você precisa combinar ocase +break.
Mas caso você tenha a necessidade de executar o mesmo case para mais de uma condição, pode fazer uso dofallthrough que transfere o controle para ocase seguinte:

// nesse exemplo ambos os cases serão executadosswitchp.status{caserascunho:fmt.Println("bloco rascunho")fallthroughcasecongelado:fmt.Println("bloco congelado")fmt.Println("aplica lógica compartilhada entre produtos congelados e rascunhos")}fmt.Println("switch terminado")
Enter fullscreen modeExit fullscreen mode

Label comcontinue ebreak

Em Go os blocos de códigos podem ter labels e podemos combinar o uso das palavras reservadas de controle com os labels. Isso acaba sendo útil quando temos operações aninhadas. Por exemplo:

funcmain(){produtos:=[]produto{{nome:"Produto Final",cor:verde,status:publicado,criado:time.Now(),},{nome:"Produto Teste",cor:verde,status:rascunho,criado:time.Now(),},}for_,p:=rangeprodutos{switchp.status{casepublicado:breakcaserascunho:fmt.Println("bloco rascunho")fallthroughcasecongelado:fmt.Println("aplica lógica compartilhada entre produtos congelados e rascunhos")}fmt.Println("aplica regra para produtos não publicados")}fmt.Println("Loop terminado")}
Enter fullscreen modeExit fullscreen mode

Se você executar o código vai perceber que o break do switch não interrompe a execução do for. Com o uso de label fica assim:

loopDeProduto:for_,p:=rangeprodutos{switchp.status{casepublicado:breakloopDeProdutocaserascunho:fmt.Println("bloco rascunho")fallthroughcasecongelado:fmt.Println("aplica lógica compartilhada entre produtos congelados e rascunhos")}fmt.Println("aplica regra para produtos não publicados")}fmt.Println("Loop terminado")
Enter fullscreen modeExit fullscreen mode

Ou seja, com label você consegue controlar a iteração do for de dentro do switch. Mas poderia ser doisfor aninhados também, ou qualquer outro bloco aninhado.

Bom esses recursos de controle são importantes de saber que existem, porém na minha opinião eles são bem evitáveis.
No geral quando você está fazendo operações aninhadas e precisando fazer um controle tão detalhado é um grande sinal de que talvez o seu código não esteja tão simples.
Sempre considere a expressividade do código, não o faça funcionar a qualquer custo!

Resumo

  • continue pula para próxima execução dofor.
  • break interrompe execução do bloco.
  • fallthrough transfere controle para o case seguinte.
  • Labels te possibilitam controlar de blocos aninhados.
  • Sempre considere a expressividade do seu código.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

I'm just a regular everyday normal developer.
  • Location
    São Paulo, Brasil
  • Work
    Software Engineer at Pulley
  • Joined

More fromBruno Gomes

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp