Junior — Middle
Goroutine колдонбостон каналдар менен иштөө ыкмаларынын мисалдарын бере аласызбы?
sobes.tech AI
AIден жооп
Go-da kanallar adatylykda goroutine-ler arasyndaky aragatnşylyk üçin ulanylýar, ýöne goşmaça goroutine-leri işjeňleşdirmezden hem ulanylyp bilner, meselem, sinkron maglumat geçiriş üçin.
Mysal:
package main
import "fmt"
func main() {
ch := make(chan int)
// Bir akymda iberme we almak (goroutine-lar bolmazdan)
go func() {
ch <- 42
}()
val := <-ch
fmt.Println(val)
}
Emma, bu mysalda iberme üçin goroutine ulanylýar, bloklamagy öňüni almak üçin. Goroutine-lar ulanylmazdan, iberme we almak sekwensial bolmaly, meselem:
package main
import "fmt"
func main() {
ch := make(chan int, 1) // Bufferli kanal
ch <- 10 // Bufferli kanala iberme
val := <-ch // Kanaldan almak
fmt.Println(val)
}
Bu ýerde, bufferli kanal bloklamadan bahalanyp, bahasy bufferde ýer bolansoň, bahasy iberip bolýar. Şonuň üçin, bufferli kanallar we sekwensial iberip almak usullary goroutine-lar bolmazdan işlemek mümkin.