Go'da channels
Go tilida goroutine yordamida bir nechta vazifalarni bir vaqtda, mustaqil tarzda bajarish mumkin. Ammo goroutinelar o‘zaro qanday ma’lumot almashadi? Bir vazifa boshqa bir vazifaga natijani qanday yetkazadi? Ana shu savollarga javob berishda channellar muhim rol o‘ynaydi.
Channel — bu Go tilidagi maxsus obyekt bo‘lib, goroutinelar o‘rtasida ma’lumot uzatishni xavfsiz va tartibli tarzda amalga oshirish imkonini beradi. Oddiy qilib aytganda, channel — bu ma’lumot oqimiga o‘xshash bo‘lib, bir goroutine yozsa, boshqasi uni o‘qib oladi. Bu orqali siz goroutinelar orasida sinxronlashuvga erishishingiz mumkin.
Info
Channel - Goroutine
lar o'rtasida ma'lumot almashish uchun mo'ljallangan ma'lumot turi.
Channels chan
va make
kalit so'zlari bilan e'lon qilinadi. Channelni e'lon qilishda biror paketni import qilishga hojat yo'q.
Channel e'lon qilish
Oddiy int channel:
Channel nima va u qanday e'lon qilinishi tushunib oldik endi bu channelga ma'lumot qanday yozilishi va o'qilishini ko'rib chiqamiz.
Channel orqali ma'lumot uzatish uchun quyidagi operatorlardan foydalanamiz:
ch <- value
— channelga ma’lumot yozish (send)value := <- ch
— channeldan ma’lumot o‘qish (receive)
Misol:
package main
import "fmt"
func main() {
ch := make(chan int) // int tipidagi channel
// Goroutine orqali ma’lumot yozish
go func() {
ch <- 2025 // channelga qiymat yuboramiz
}()
// Channeldan ma’lumot o‘qish
val := <-ch
fmt.Println("Channeldan o'qilgan qiymat:", val)
}
Natija:
- go func() yordamida goroutine ishga tushadi va ch <- 42 orqali channelga 42 ni yozadi.
- val := <-ch kod qatori shu qiymatni kutadi va oladi.
- Natijada fmt.Println(...) orqali ekranga quyidagicha chiqadi:
Channellar bir tomonlama (unidirectional) va ikki tomonlama (bidirectional) ko‘rinishda ishlaydi. Bu channel'larning ma’lumotni faqat yozish yoki faqat o‘qish imkoniyatiga ega bo‘lishini bildiradi.