Junior — Middle
Көптөгөн goroutine'дерден каналга маалыматтарды коопсуз жазууну кантип камсыз кылса болот, блоктоону колдонбостон?
sobes.tech AI
AIден жооп
Go тилинде, бир нече горутинден канал аркылуу маалыматтарды коопсуз жазуу үчүн, адатта, блоктоолорду колдонбостон, өзү каналды колдонуу жетиштүү, анткени Goдогу каналдар стандарттык түрдө жиптерге коопсуз.
Мисал:
ch := make(chan int)
// Бир нече горутинден каналга жазуу
for i := 0; i < 5; i++ {
go func(val int) {
ch <- val // коопсуз жазуу
}(i)
}
// Каналдан окуу
for i := 0; i < 5; i++ {
fmt.Println(<-ch)
}
Эгер жазууну блоктогонго каршы камсыз кылгыңыз келсе, буферленген каналды колдонсоңуз болот. Ошентип, кол менен блоктоолор керек эмес, анткени канал синхрондоштуруп берет.