Casi da conoscere quando si utilizzano le istruzioni di selezione in Golang

Nel linguaggio Go, l'istruzione select è come l'istruzione switch , ma nell'istruzione select, l'istruzione case si riferisce alla comunicazione, ovvero all'operazione di invio o ricezione sul canale.

Casi da conoscere quando si utilizzano le istruzioni di selezione in Golang

Sintassi:

select{

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

In questo articolo impareremo come utilizzare il caso predefinito per evitare situazioni di stallo. Ma prima scopriamo cos'è il caso di deadlock quando si utilizza il comando select di Golang ?

Cose da sapere sul caso di stallo a Golang

Deadlock: quando si tenta di leggere o scrivere dati da un canale ma il canale è vuoto. Quindi blocca l'esecuzione corrente della goroutine e passa il controllo ad altre goroutine, ma se non è disponibile nessun'altra goroutine o se altre goroutine sono inattive a causa di questa situazione, il programma si bloccherà. Questo fenomeno è chiamato stallo. Come mostrato nell'esempio seguente:

Per esempio:

// 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: }="" }="">

Risultato:

fatal error: all goroutines are asleep - deadlock!

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

Per evitare questa situazione, utilizziamo il caso predefinito nell'istruzione select. In altre parole, quando si verifica un deadlock nel programma, viene eseguito il caso predefinito dell'istruzione select per evitare il deadlock. Come nell'esempio seguente, utilizziamo il caso predefinito nell'istruzione select per evitare il deadlock.

Per esempio:

// 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..!")="" }="" }="">

Risultato:

!.. Default case..!

È anche consentito utilizzare il caso predefinito quando l' istruzione select ha solo un canale nil . Come mostrato nell'esempio seguente, il canale c è nil, quindi viene eseguito il caso predefinito; se il caso predefinito qui non è disponibile, il programma si bloccherà per sempre e si verificherà un deadlock.

Per esempio:

// 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..!")="" }="" }="">

Risultato:

Default case..!

Lascia un commento

Come smaltire una lavatrice a Taranto: ritiro, centro di raccolta o rivenditore?

Come smaltire una lavatrice a Taranto: ritiro, centro di raccolta o rivenditore?

Come smaltire una lavatrice a Taranto: confronto tra centro comunale, ritiro domiciliare Kyma Ambiente e ritiro uno contro uno del rivenditore.

TARI a Ferrara: come fare voltura, cessazione e variazione

TARI a Ferrara: come fare voltura, cessazione e variazione

Guida aggiornata per gestire TARI e Tariffa Corrispettiva Puntuale a Ferrara: documenti, voltura, cessazione, variazione e controlli finali.

Ritiro rifiuti ingombranti a Napoli: come prenotarlo e quando scegliere un’alternativa

Ritiro rifiuti ingombranti a Napoli: come prenotarlo e quando scegliere un’alternativa

Come prenotare il ritiro dei rifiuti ingombranti a Napoli con ASIA, cosa si può conferire e quando convengono Ecopunti Mobili o centri di raccolta.

Come smaltire un frigorifero: RAEE, ritiro gratuito e 4 passaggi pratici

Come smaltire un frigorifero: RAEE, ritiro gratuito e 4 passaggi pratici

Come smaltire un frigorifero in Italia: regole RAEE, ritiro uno contro uno, centro di raccolta, preparazione e errori da evitare.

Come smaltire una power bank a Palermo: dove portarla e come farlo in sicurezza

Come smaltire una power bank a Palermo: dove portarla e come farlo in sicurezza

Guida pratica per smaltire una power bank a Palermo: CCR RAP, ritiro nei negozi, regole RAEE e precauzioni per batterie al litio danneggiate.

Ritiro rifiuti ingombranti a Reggio Emilia: come prenotarlo con Iren

Ritiro rifiuti ingombranti a Reggio Emilia: come prenotarlo con Iren

Scopri come prenotare il ritiro dei rifiuti ingombranti a Reggio Emilia con Iren Ambiente, quali informazioni preparare e come verificare le regole locali.

Come smaltire una bombola del gas a Catania: canali sicuri e cosa evitare

Come smaltire una bombola del gas a Catania: canali sicuri e cosa evitare

Guida pratica per smaltire una bombola GPL a Catania: rivenditore, Dusty, trasporto sicuro, casi urgenti e errori da evitare.

Come smaltire una bicicletta a Firenze: riuso, Ecocentro o ritiro ingombranti?

Come smaltire una bicicletta a Firenze: riuso, Ecocentro o ritiro ingombranti?

Come smaltire una bicicletta a Firenze: come scegliere tra riuso, Ecocentro e ritiro ingombranti, con criteri pratici e verifiche utili prima del conferimento.

Come smaltire un portatile a Padova: dove portarlo e come cancellare i dati

Come smaltire un portatile a Padova: dove portarlo e come cancellare i dati

Devi smaltire un portatile a Padova? Scopri centri di raccolta, ritiro in negozio, regole RAEE e come proteggere i dati prima della consegna.

Come smaltire pile esauste a Salerno: dove portarle e cosa fare prima del conferimento

Come smaltire pile esauste a Salerno: dove portarle e cosa fare prima del conferimento

Guida aggiornata per smaltire pile esauste a Salerno: negozi, centri di raccolta Fratte e Arechi, centro mobile, pile al litio e errori da evitare.