Interruption de l'exécution d'une routine Go (*TCPListener) Accepter
Lors de la création d'un serveur TCP dans Go, vous pouvez rencontrer le défi de gracieusement arrêter le serveur et interrompre la fonction de gestion des goroutines (*TCPListener) Accepter.
Dans Go, func (*TCPListener) Accepter bloque l'exécution jusqu'à ce qu'une connexion soit reçue. Pour interrompre cette goroutine, vous devez :
Fermer le réseau.Écouteur :
La clé pour interrompre la goroutine Accepter est de fermer le réseau.Listener obtenu à partir du réseau. Écouter(...). En fermant l'écouteur, vous signalez au système d'exploitation qu'aucune connexion ne sera reçue, provoquant la sortie de la goroutine Accepter.
Retour de la goroutine :
Après la fermeture l'auditeur, assurez-vous que votre goroutine revienne. Si la goroutine a du code après l'appel Accept, elle continuera à s'exécuter et peut provoquer un comportement ou des erreurs involontaires.
Exemple de code :
<code class="go">package main import ( "fmt" "net" ) func main() { ln, err := net.Listen("tcp", ":8080") if err != nil { // Handle error } go func() { for { conn, err := ln.Accept() if err != nil { if err == net.ErrClosed { return // Listener was closed } // Handle other errors } // Handle connection conn.Close() } }() fmt.Println("Press enter to stop...") var input string fmt.Scanln(&input) ln.Close() // Close the listener, interrupting the Accept loop }</code>
Ce code crée un TCPListener sur le port 8080 et lance une goroutine qui gère les connexions entrantes dans une boucle infinie. Lorsque l'utilisateur appuie sur Entrée, le programme ferme l'écouteur et interrompt l'appel bloquant Accepter, provoquant le retour de la goroutine.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!