Sobes.tech
Junior — Middle

Vai vari sniegt piemēru, kad un kā tiek izmantoti kanāli datu apmaiņai starp pavedieniem vai gorutinām?

sobes.tech AI

Atbilde no AI

Go valodā kanāli tiek izmantoti drošai datu apmaiņai starp gorutīnām, ļaujot tās sinhronizēt un pārsūtīt vērtības.

Piemērs, kā izmantot kanālu skaitļu pārsūtīšanai no vienas gorutīnas uz otru:

package main

import (
    "fmt"
    "time"
)

func producer(ch chan int) {
    for i := 0; i < 5; i++ {
        ch <- i // datu sūtīšana uz kanāla
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // kanāla aizvēršana pēc visu datu sūtīšanas
}

func consumer(ch chan int) {
    for val := range ch { // datu saņemšana no kanāla
        fmt.Println("Saņemts:", val)
    }
}

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

Šeit, producer sūta skaitļus uz kanāla, un consumer tos lasa. Kanāli nodrošina drošu datu pārsūtīšanu bez nepieciešamības izmantot mutexus vai citus sinhronizācijas mehānismus.