Junior — Middle
Czy możesz podać przykład, kiedy i jak używane są kanały do wymiany danych między wątkami lub gorutynami?
sobes.tech AI
Odpowiedź od AI
W Go kanały są używane do bezpiecznej wymiany danych między goroutines, umożliwiając ich synchronizację i przesyłanie wartości.
Przykład użycia kanału do przesyłania liczb z jednej goroutine do drugiej:
package main
import (
"fmt"
"time"
)
func producer(ch chan int) {
for i := 0; i < 5; i++ {
ch <- i // wysyłanie danych do kanału
time.Sleep(time.Millisecond * 500)
}
close(ch) // zamknięcie kanału po wysłaniu wszystkich danych
}
func consumer(ch chan int) {
for val := range ch { // odbieranie danych z kanału
fmt.Println("Odebrane:", val)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
Tutaj producer wysyła liczby do kanału, a consumer je odczytuje. Kanały zapewniają bezpieczny transfer danych bez konieczności używania mutexów lub innych mechanizmów synchronizacji.