Sobes.tech
Junior — Middle

Ar galite pateikti pavyzdį, kada ir kaip naudojami kanalai duomenų keitimui tarp gijų ar gorutinų?

sobes.tech AI

Atsakymas iš AI

Go kalbose kanalai naudojami saugiai duomenų mainams tarp gorutinų, leidžiant jų sinchronizaciją ir reikšmių perdavimą.

Pavyzdys, kaip naudoti kanalą skaičių perdavimui iš vienos gorutinės kitai:

package main

import (
    "fmt"
    "time"
)

func producer(ch chan int) {
    for i := 0; i < 5; i++ {
        ch <- i // duomenų siuntimas į kanalą
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // kanalo uždarymas po visų duomenų siuntimo
}

func consumer(ch chan int) {
    for val := range ch { // duomenų gavimas iš kanalo
        fmt.Println("Gauta:", val)
    }
}

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

Čia, producer siunčia skaičius į kanalą, o consumer juos skaito. Kanalai užtikrina saugų duomenų perdavimą be būtinybės naudoti mutexus ar kitus sinchronizacijos mechanizmus.