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-ების ან სხვა სინქრონიზაციის მექანიზმების გამოყენების გარეშე.