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

Агар мехоҳед, ки навишт ба блок наафтад, метавонед канал бо буферро истифода баред. Ин тавр, блокҳои дастӣ лозим намешаванд, зеро канал ҳамоҳангсозиро таъмин мекунад.