Sobes.tech
Junior — Middle

Goroutin istifadə etmədən kanallarla işləmək üçün metodların nümunəsini göstərə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da kanallar adətən goroutine-lər arasında əlaqə üçün istifadə olunur, lakin əlavə goroutine-lər başlamadan da istifadə edilə bilər, məsələn, sinxron məlumat ötürülməsi üçün.

Nümunə:

package main

import "fmt"

func main() {
    ch := make(chan int)

    // Göndərmə və qəbul tək bir axında (goroutine olmadan)
    go func() {
        ch <- 42
    }()

    val := <-ch
    fmt.Println(val)
}

Lakin, bu nümunədə göndərmə üçün goroutine istifadə olunur, bloklamanın qarşısını almaq üçün. Əgər ümumiyyətlə goroutine istifadə olunmasa, göndərmə və qəbul ardıcıl baş verməlidir, məsələn:

package main

import "fmt"

func main() {
    ch := make(chan int, 1) // Bufferli kanal

    ch <- 10  // Bufferli kanala göndərmə
    val := <-ch // Kanaldan qəbul

    fmt.Println(val)
}

Burada, bufferli kanal bloklamadan dəyər göndərməyə imkan verir, çünki bufferdə yer var. Buna görə, bufferli kanallar və ardıcıl göndərmə/qəbul ilə goroutine-lər olmadan işləmək mümkündür.