Junior — Middle
Kuidas korraldada süsteemis suhtlust ja andmeedastust kanalite kaudu?
sobes.tech AI
Vastus AI-lt
Go keeles, gorutinide vaheline suhtlus organiseeritakse sageli kanalite (channels) kaudu — tüübitud torujuhtmed andmete edastamiseks.
Andmete edastamiseks luuakse kanal make(chan Tüüp). Gorutined saavad saata andmeid kanalile kasutades <- operaatorit ning samuti vastu võtta andmeid samast kanalist, mis tagab sünkroniseerimise.
Näide:
package main
import (
"fmt"
"time"
)
func tootja(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i // andmete saatmine
time.Sleep(time.Millisecond * 500)
}
close(ch) // kanali sulgemine, et märkida lõppu
}
func tarbija(ch <-chan int) {
for val := range ch { // andmete vastuvõtt kanalist
fmt.Println("Saadud:", val)
}
}
func main() {
ch := make(chan int)
go tootja(ch)
tarbija(ch)
}
Nii võimaldavad kanalid turvalist ja tõhusat andmevahetust gorutinite vahel, vältides võistlusolukordi ja blokeeringuid.