Sobes.tech
Junior — Middle

როგორ ორგანიზება გავუკეთოთ ურთიერთქმედებას და მონაცემთა გადაცემას სისტემაში არხების მეშვეობით?

sobes.tech AI

პასუხი AI-სგან

Go ენის ფარგლებში, გორუტინებს შორის ურთიერთქმედება ხშირად ორგანიზებულია არხების (channels) მეშვეობით — ტიპიზირებული მილების საშუალებით მონაცემთა გადაცემისთვის.

მონაცემების გადაცემისთვის, ქმნიან არხს make(chan ტიპი)-ის გამოყენებით. გორუტინები შეუძლიათ არხზე მონაცემების გაგზავნა <- ოპერატორის გამოყენებით, და ასევე მიღება იმავე ოპერატორით, რაც უზრუნველყოფს სინქრონიზაციას.

მაგალითი:

package main

import (
    "fmt"
    "time"
)

func მწარმოებელი(ch chan<- int) {
    for i := 0; i < 5; i++ {
        ch <- i // მონაცემების გაგზავნა
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // არხის დახურვა, დასასრულის ნიშნად
}

func მომხმარებელი(ch <-chan int) {
    for val := range ch { // მონაცემების მიღება არხიდან
        fmt.Println("მიღებული:", val)
    }
}

func main() {
    ch := make(chan int)
    go მწარმოებელი(ch)
    მომხმარებელი(ch)
}

ამ გზით, არხები უზრუნველყოფს უსაფრთხო და ეფექტიანი მონაცემთა გადაცემას გორუტინებს შორის, თავიდან აცილებულია შეჯახებათა პირობები და ბლოკირებები.