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-у.