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.