Junior — Middle
Чӣ гуна таъмини навиштани бехатари маълумот дар канал аз ҷониби чанд goroutine бе истифодаи бастани?
sobes.tech AI
Ҷавоб аз AI
Дар Go, барои навиштани бехатарона маълумот дар канал аз ҷониби чанд goroutine бидуни истифодаи блокҳо одатан кофист, ки худи каналро истифода баред, зеро каналҳо дар Go ба таври пешфарз бехатар барои ҳамзамонкорӣ мебошанд.
Масалан:
ch := make(chan int)
// Навиштан ба канал аз чанд goroutine
for i := 0; i < 5; i++ {
go func(val int) {
ch <- val // навишти бехатар
}(i)
}
// Хондан аз канал
for i := 0; i < 5; i++ {
fmt.Println(<-ch)
}
Агар мехоҳед, ки навишт ба блок наафтад, метавонед канал бо буферро истифода баред. Ин тавр, блокҳои дастӣ лозим намешаванд, зеро канал ҳамоҳангсозиро таъмин мекунад.