Sobes.tech
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("Ալիքում տվյալներ չկան")
}