Junior — Middle
Czy wysyłanie wiadomości do jednego kanału przez wiele goroutine jednocześnie jest dozwolone?
sobes.tech AI
Odpowiedź od AI
Tak, w Go dozwolone jest wysyłanie wiadomości do kanału z wielu goroutine jednocześnie. Kanały w Go są bezpieczne dla współbieżności i zapewniają synchronizację między goroutine.
Jednak ważne jest, aby pamiętać:
- Jeśli kilka goroutine pisze do tego samego kanału, a nikt go nie czyta, spowoduje to blokadę.
- Jeśli kanał jest buforowany, zapisy będą blokowane tylko wtedy, gdy bufor się zapełni.
- Należy ostrożnie zarządzać zamykaniem kanału — tylko nadawca powinien go zamknąć, i tylko wtedy, gdy jest pewien, że nie będzie więcej zapisów.
Przykład:
ch := make(chan int)
// Uruchomienie kilku goroutine wysyłających dane do kanału
for i := 0; i < 3; i++ {
go func(id int) {
ch <- id
}(i)
}
// Odczyt z kanału
for i := 0; i < 3; i++ {
fmt.Println(<-ch)
}
W ten sposób, jednoczesne wysyłanie do kanału z wielu goroutine jest standardową praktyką w Go.