Casos a serem conhecidos ao usar instruções de seleção em Golang

Na linguagem Go, a instrução select é como a instrução switch , mas na instrução select, a instrução case se refere à comunicação, ou seja, enviar ou receber uma operação no canal.

Casos a serem conhecidos ao usar instruções de seleção em Golang

Sintaxe:

select{

case SendOrReceive1: // Lệnh
case SendOrReceive2: // Lệnh
case SendOrReceive3: // Lệnh
.......
default: // Lệnh

Neste artigo, aprenderemos como usar o caso padrão para evitar deadlock. Mas primeiro, vamos descobrir o que é o caso de deadlock ao usar o comando select do Golang ?

Coisas que você precisa saber sobre o caso de impasse em Golang

Deadlock: Quando você tenta ler ou gravar dados de um canal, mas o canal está vazio. Então ele bloqueia a execução atual da goroutine e passa o controle para outras goroutines, mas se nenhuma outra goroutine estiver disponível ou outras goroutines estiverem em repouso devido a essa situação, o programa travará. Esse fenômeno é chamado de deadlock. Conforme mostrado no exemplo abaixo:

Por exemplo:

// Chương trình Go minh hoạc
// cách deadlock phát sinh
package main 

// Hàm chính
func main() { 

	// Tạo một kênh
	// Deadlock phát sinh bởi
	// không có goroutine đang viết
	// vào kênh này, vì thế
	// lệnh select đã bị khóa mãi mãi
	c := make(chan int) 
	select { 
	case <-c: }="" }="">

Resultado:

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()

Para evitar essa situação, usamos o caso padrão na instrução select. Em outras palavras, quando ocorre um deadlock no programa, o caso padrão da instrução select é executado para evitar o deadlock. Como no exemplo abaixo, usamos o caso padrão na instrução select para evitar deadlock.

Por exemplo:

// Chương trình Go minh họa cách giải quyết
// vấn đề deadlock bằng case mặc định
package main 

import "fmt"

// Hàm chính
func main() { 

	// Tạo 1 kênh
	c := make(chan int) 
	select { 
	case <-c: default:="" fmt.println("!..="" default="" case..!")="" }="" }="">

Resultado:

!.. Default case..!

Você também tem permissão para usar o caso padrão quando a instrução select tem apenas um canal nulo . Como mostrado no exemplo abaixo, o canal c é nulo, então o caso padrão é executado. Se o caso padrão aqui não estiver disponível, o programa será bloqueado para sempre e ocorrerá um deadlock.

Por exemplo:

// Chương trình Go minh họa
// chạy case mặc định
package main 

import "fmt"

// Hàm chính
func main() { 

	// Tạo một kênh
	var c chan int

	select { 
	case x1 := <-c: fmt.println("value:="" ",="" x1)="" default:="" fmt.println("default="" case..!")="" }="" }="">

Resultado:

Default case..!

Deixar um comentário

Ecoponto em São Paulo: o que pode levar e como funciona

Ecoponto em São Paulo: o que pode levar e como funciona

Veja o que pode levar ao Ecoponto em São Paulo, os limites, horários, materiais proibidos e quando usar o Cata-Bagulho no lugar.

Como descartar bateria de lítio em Ribeirão Preto: opções seguras e onde entregar

Como descartar bateria de lítio em Ribeirão Preto: opções seguras e onde entregar

Veja onde levar baterias de lítio em Ribeirão Preto, como comparar ecopontos e logística reversa e o que fazer com baterias inchadas ou integradas a eletrônicos.

IPTU em Duque de Caxias: como emitir a segunda via e consultar débitos

IPTU em Duque de Caxias: como emitir a segunda via e consultar débitos

Veja como emitir a segunda via do IPTU em Duque de Caxias, consultar débitos, conferir a guia e saber quando procurar a Fazenda.

Como descartar sofá em Belo Horizonte: opções, custos e cuidados antes de decidir

Como descartar sofá em Belo Horizonte: opções, custos e cuidados antes de decidir

Veja como descartar sofá em Belo Horizonte, compare URPV, doação e coleta privada e entenda limites, custos, transporte e erros a evitar.

Como descartar celular em Campo Grande: pontos e cuidados

Como descartar celular em Campo Grande: pontos e cuidados

Saiba como descartar celular em Campo Grande com segurança: prepare os dados, encontre Ecoponto ou PEV e cuide da bateria antes da entrega.

Como descartar power bank em Uberlândia: pontos, cuidados e o que evitar

Como descartar power bank em Uberlândia: pontos, cuidados e o que evitar

Saiba onde descartar power bank em Uberlândia, como encontrar pontos de logística reversa e quais cuidados tomar antes de levar a bateria.

BPC para idoso: quais são os requisitos e como saber se você pode receber

BPC para idoso: quais são os requisitos e como saber se você pode receber

Entenda os requisitos do BPC para idoso em 2026: idade mínima, renda por pessoa, CadÚnico, biometria, cálculo da família e como solicitar.

FGTS: como corrigir dados cadastrais? Veja qual caminho escolher

FGTS: como corrigir dados cadastrais? Veja qual caminho escolher

Saiba como corrigir dados cadastrais do FGTS e quando usar o app, a Receita Federal, o RH da empresa ou a CAIXA.

Como descartar notebook em Uberlândia com segurança: pontos, dados e bateria

Como descartar notebook em Uberlândia com segurança: pontos, dados e bateria

Veja onde entregar um notebook em Uberlândia, como apagar seus dados, preparar o transporte e agir quando a bateria estiver danificada.

Como descartar bateria de lítio em Belo Horizonte: guia seguro para iniciantes

Como descartar bateria de lítio em Belo Horizonte: guia seguro para iniciantes

Saiba onde e como descartar bateria de lítio em Belo Horizonte, como preparar o material com segurança e o que fazer se a bateria estiver inchada ou danificada.