Sobes.tech
Junior — Middle

Стандарттык маалымат берүү каналы менен иштөөдө кайсы шарттарда блоктоо жүргүзүлөт?

sobes.tech AI

AIден жооп

Goда стандарттуу маалымат берүү каналы төмөнкү учурларда блоктолот:

  • Каналга маанини жөнөтүүдө (chan <- value), эгер канал буферсиз болсо же буфер толгон болсо, жөнөтүүчү горутина башка агым маанини окуганга чейин блоктолот.
  • Каналдан окуганда (value := <- chan), эгер канал бош болсо, окуучу горутина маанилер пайда болгонго чейин блоктолот.

Ошентип, блоктоо толгон каналга маалымат жөнөтүү же бош каналдан окуу аракетинде болот жана бул горутиндердин ортосунда синхрондоштуруу камсыз кылынат.

Мисал:

ch := make(chan int) // буферсиз канал

// Жөнөтүү блоктолот, кимдир бирөө окуганга чейин
go func() {
    ch <- 42
}()

баа := <-ch // окуу жөнөтүүнү ачат
fmt.Println(баа)