Lequel des fragments de code suivants contient une erreur ou un problème potentiel lié au travail avec des canaux? Option 1 package main func main() { ch := make(chan int) ch <- 1 } Option 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Option 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Option 4 package main func main() { ch := make(chan int) close(ch) <-ch } Option 5 package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech IA
Réponse de l'IA
L'erreur se trouve dans l'Option 1 :
package main
func main() {
ch := make(chan int)
ch <- 1
}
Ici, un canal non tamponné est créé avec ch := make(chan int). L'envoi dans ce canal ch <- 1 se bloque jusqu'à ce que quelqu'un lise du canal. Dans ce code, il n'y a pas de récepteur, donc le programme se bloquera indéfiniment (deadlock).
L'option 2 est correcte, car le canal est tamponné avec une taille de 1, et l'envoi ne se bloque pas si le tampon n'est pas plein.
L'option 3 est également correcte : l'envoi et la réception sont équilibrés.
L'option 4 est correcte : on peut lire d'un canal fermé, la lecture renverra la valeur zéro et ne se bloquera pas.
L'option 5 est correcte : tampon de 3, une valeur est envoyée, le tampon n'est pas plein.
En résumé, le problème se trouve uniquement dans l'Option 1 — blocage lors de l'envoi dans un canal non tamponné sans récepteur.