Sobes.tech
Junior — Middle

Da li je dozvoljeno slanje poruka u jedan kanal od strane više gorutina istovremeno?

sobes.tech АИ

Одговор од АИ

Да, у Go је дозвољено да се поруке истовремено шаљу у канал из више горутина. Канали у Go-у су безбедни за токове и обезбеђују синхронизацију између горутина.

Међутим, важно је запамтити:

  • Ако више горутина пише у исти канал и нико га не чита, то ће довести до блокирања.
  • Ако је канал буфериран, записивања ће блокирати само када је пуњен буфер.
  • Потребно је пажљиво управљати затварањем канала: само пошиљалац га треба затворити, и то само када је сигуран да више неће бити записа.

Пример:

ch := make(chan int)

// Покретање више горутина које шаљу податке у канал
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// читање из канала
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

На овај начин, истовремено слање у канал из више горутина је стандардна пракса у Go-у.