Junior — Middle
Ի՞նչ է տեղի ունենում, եթե փորձեք կարդալ տվյալներ մի ալիքից, որը այս պահին պարունակում է տարրեր։
sobes.tech AI
Պատասխան AI-ից
Go լեզվում, եթե փորձեք կարդալ մի ալիքից, որը այս պահին պարունակում է էլեմենտներ, վարքագիծը կախված է ալիքին տեսակից:
- Բուֆերային ալիք: եթե բուֆերը դատարկ է, կարդալը բլոկվում է, մինչև որ ալիքին գրանցվի էլեմենտ:
- Ալիք առանց բուֆերի: կարդալը բլոկվում է մինչև որ մյուս gorutina ուղարկի արժեք:
Այսպիսով, դատարկ ալիքից կարդալը բլոկում է ընթացիկ gorutina-ն մինչև տվյալներ հայտնվեն կամ ալիք փակվի:
Օրինակ՝
ch := make(chan int)
// Դատարկ ալիքից կարդալը կբլոկի կատարմանը
val := <-ch // բլոկվում է, մինչև որ ինչ-որ մեկը ուղարկի արժեք
// Բլոկավորումը խուսափելու համար, կարող եք օգտագործել select-ով default
select {
case val := <-ch:
fmt.Println("Ստացվել է", val)
default:
fmt.Println("Ալիքում տվյալներ չկան")
}