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