Sobes.tech
Junior — Middle

Ի՞նչ պայմաններում է կատարվում արգելափակումը տվյալների ստանդարտ հաղորդման ալիքի հետ աշխատելիս։

sobes.tech AI

Պատասխան AI-ից

Go-ում ստանդարտ տվյալների փոխանցման ալիքն արգելափակվում է հետևյալ դեպքերում՝

  • Երբ ուղարկում եք արժեք ալիքին (chan <- value), եթե ալիքը չունի բուֆեր կամ բուֆերը լեցուն է, ուղարկող gorutina-ն արգելափակվում է մինչև որ մյուս թևը կարդա արժեքը:
  • Երբ կարդում եք ալիքից (value := <- chan), եթե ալիքը դատարկ է, կարդացող gorutina-ն արգելափակվում է մինչև որ տվյալները հայտնվեն:

Այսպիսով, արգելափակումը տեղի է ունենում, երբ փորձում եք ուղարկել տվյալներ լեցուն ալիքին կամ կարդալ դատարկ ալիքից, ապահովելով gorutinas միջև սինխրոնիզացիան:

Օրինակ՝

ch := make(chan int) // առանց բուֆեր

// Ուղարկումը արգելափակվում է մինչև որ մեկը կարդա
go func() {
    ch <- 42
}()

արժեք := <-ch // կարդալը բացում է ուղարկումը
fmt.Println(արժեք)