Sobes.tech
Junior — Middle

Tudnál példát mondani arra, mikor és hogyan használják a csatornákat az adatok cseréjére szálak vagy goroutine-ok között?

sobes.tech MI

Válasz az MI-től

A Go nyelvben a csatornák biztonságos adatcserére szolgálnak a goroutine-ok között, lehetővé téve azok szinkronizálását és értékek továbbítását.

Példa egy csatorna használatára, amely számokat továbbít egyik goroutine-tól a másikig:

package main

import (
    "fmt"
    "time"
)

func producer(ch chan int) {
    for i := 0; i < 5; i++ {
        ch <- i // adatok küldése a csatornába
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // a csatorna bezárása az összes adat küldése után
}

func consumer(ch chan int) {
    for val := range ch { // adatok fogadása a csatornából
        fmt.Println("Kaptuk:", val)
    }
}

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

Itt a producer számokat küld a csatornába, a consumer pedig olvassa azokat. A csatornák biztosítják az adatok biztonságos átadását mutexek vagy más szinkronizációs mechanizmusok használata nélkül.