Skip to content

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 - Goroutinelar 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:

ch := make(chan int)

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:

Channeldan o'qilgan qiymat: 2025
  • 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.