Sobes.tech
Junior — Middle

Tizimda kanallar orqali o'zaro ta'sir va ma'lumotlarni uzatishni qanday tashkil qilish mumkin?

sobes.tech AI

AIdan javob

Go tilida, goroutinlar o'rtasidagi o'zaro ta'sir odatda kanallar (channels) orqali tashkil etiladi — ma'lumotlarni uzatish uchun tiplangan quvurlar.

Ma'lumotlarni uzatish uchun make(chan Tip) yordamida kanal yaratiladi. Goroutinlar kanalda <- operatori yordamida ma'lumot yuborishi va qabul qilishi mumkin, bu sinxronizatsiyani ta'minlaydi.

Misol:

package main

import (
    "fmt"
    "time"
)

func ishlab chiqaruvchi(ch chan<- int) {
    for i := 0; i < 5; i++ {
        ch <- i // ma'lumot yuborish
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // kanalni yopamiz, tugashini bildirish uchun
}

func iste'molchi(ch <-chan int) {
    for val := range ch { // kanaldan ma'lumot olish
        fmt.Println("Olingan:", val)
    }
}

func main() {
    ch := make(chan int)
    go ishlab chiqaruvchi(ch)
    iste'molchi(ch)
}

Shu tarzda, kanallar xavfsiz va samarali tarzda goroutinlar o'rtasida ma'lumot uzatishni ta'minlaydi, raqobat shartlari va blokirovkalarni oldini oladi.