Sobes.tech
Junior — Middle

Pouvez-vous donner un exemple de méthodes pour travailler avec des canaux sans utiliser de goroutines?

sobes.tech IA

Réponse de l'IA

Les canaux en Go sont généralement utilisés pour la communication entre goroutines, mais ils peuvent également être utilisés sans lancer de goroutines supplémentaires, par exemple, pour la transmission de données synchrone.

Exemple :

package main

import "fmt"

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

    // Envoi et réception dans un seul thread (sans goroutines)
    go func() {
        ch <- 42
    }()

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

Cependant, dans cet exemple, une goroutine est utilisée pour l'envoi afin d'éviter le blocage. Si aucune goroutine n'est utilisée, l'envoi et la réception doivent se faire de manière séquentielle, par exemple :

package main

import "fmt"

func main() {
    ch := make(chan int, 1) // Canal tamponné

    ch <- 10  // Envoi dans le canal tamponné
    val := <-ch // Réception du canal

    fmt.Println(val)
}

Ici, le canal tamponné permet d'envoyer une valeur sans blocage, car il y a de la place dans le tampon. Ainsi, les méthodes de travail avec les canaux sans goroutines sont possibles en utilisant des canaux tamponnés et un envoi/réception séquentiel.