Sobes.tech
Junior — Middle

შეგიძლიათ მიაწოდოთ მაგალითი, როდის და როგორ გამოიყენება არხები მონაცემთა გაცვლისთვის თრიდებსა ან გორუტინებს შორის?

sobes.tech AI

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

Go ენაში, არხები გამოიყენება უსაფრთხო მონაცემთა გაცვლისთვის goroutine-ებს შორის, რაც საშუალებას აძლევს მათ სინქრონიზაციას და მნიშვნელობების გადაცემას.

მაგალითად, არხის გამოყენება ერთ goroutine-დან მეორე goroutine-მდე რიცხვების გადაცემისთვის:

package main

import (
    "fmt"
    "time"
)

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

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

func main() {
    ch := make(chan int)
    go producer(ch)
    consumer(ch)
}

აქ, producer აგზავნის რიცხვებს არხზე, ხოლო consumer კითხულობს მათ. არხები უზრუნველყოფს მონაცემთა უსაფრთხო გადაცემას mutex-ების ან სხვა სინქრონიზაციის მექანიზმების გამოყენების გარეშე.