Middle
Чӣ тавр дар Go канал аст? Кадом намудҳои каналҳо мавҷуданд? Каналҳои буферӣ ва бе буфер чӣ фарқ доранд?
sobes.tech AI
Ҷавоб аз AI
Го тилда канал — бу, горутинлар орасида қийматларни ўтказиш учун ишлатиладиган маълумот тури бўлиб, синхронлаштириш ва маълумот алмашишни таъминлайди.
Канал турлари:
- Бўш буферсиз каналлар — ички буферга эга эмас, юбориш, қабул қилувчи қийматни ўқиб бўлгандан кейин блокланади.
- Буферли каналлар — белгиланган ҳажмдаги ички буферга эга, ва юбориш фақат буфер тўлганда блокланади.
Фарқлар:
- Буферсиз каналларда, юборувчи ва қабул қилувчи бир вақтда тайёр бўлиши керак, бу қатъий синхронлаштиришни таъминлайди.
- Буферли каналларда, юборувчи бир неча қийматни буферга жойлаштириши мумкин, қабул қилувчи кутмай, буфер тўлгунча.
Масалан, буферли канал яратиш ва фойдаланиш:
ch := make(chan int, 2) // 2 элементли буфер
ch <- 1
ch <- 2
// ch <- 3 // блокланади, ҳаддан ташқари бўлганда
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2