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.