Sobes.tech
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.