In de taal Go is de select-instructie hetzelfde als de switch-instructie , maar in de select-instructie verwijst de case-instructie naar communicatie, dat wil zeggen de verzend- of ontvangstbewerking op een kanaal.

Syntaxis:
select{
case SendOrReceive1: // Lệnh
case SendOrReceive2: // Lệnh
case SendOrReceive3: // Lệnh
.......
default: // Lệnh
In dit artikel leggen we uit hoe u een deadlock kunt voorkomen door standaardcase te gebruiken. Maar laten we eerst eens kijken wat het deadlock-geval is bij het gebruik van de Golang select-opdracht ?
Dingen die u moet weten over een deadlock-zaak in Golang
Deadlock: wanneer u gegevens van een kanaal probeert te lezen of schrijven, maar het kanaal leeg is. Hierdoor wordt de huidige uitvoering van goroutine geblokkeerd en wordt de controle aan andere goroutines doorgegeven. Als er echter geen andere goroutine beschikbaar is of als andere goroutines in rust zijn vanwege deze situatie, zal het programma vastlopen. Dit verschijnsel wordt deadlock genoemd. Zoals in het onderstaande voorbeeld te zien is:
Bijvoorbeeld:
// 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: }="" }="">
Resultaat:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
Om deze situatie te voorkomen, gebruiken we de standaardcase in de select-instructie. Met andere woorden: wanneer er een deadlock in het programma ontstaat, wordt de standaardoptie select uitgevoerd om een deadlock te voorkomen. Net als in het onderstaande voorbeeld gebruiken we de standaardcase in de select-instructie om een deadlock te voorkomen.
Bijvoorbeeld:
// 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..!")="" }="" }="">
Resultaat:
!.. Default case..!
U mag ook de standaardcase gebruiken als de select- instructie alleen een nil- kanaal heeft . Zoals in het onderstaande voorbeeld wordt getoond, is kanaal c nul. Als de standaardoptie hier niet beschikbaar is, wordt de standaardoptie uitgevoerd. Het programma blokkeert dan voor altijd en er ontstaat een deadlock.
Bijvoorbeeld:
// 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..!")="" }="" }="">
Resultaat:
Default case..!