Go Assigner des signaux à un canal


Exemple

Souvent, vous aurez des raisons de vous arrêter lorsque votre programme se fera arrêter par le système d'exploitation et prendra des mesures pour préserver l'état ou nettoyer votre application. Pour ce faire, vous pouvez utiliser le package os/signal de la bibliothèque standard. Vous trouverez ci-dessous un exemple simple d'affectation de tous les signaux du système à un canal, puis de la réaction à ces signaux.

package main

import (
    "fmt"
    "os"
    "os/signal"
)

func main() {
    // create a channel for os.Signal
    sigChan := make(chan os.Signal)

    // assign all signal notifications to the channel 
    signal.Notify(sigChan)

    // blocks until you get a signal from the OS
    select {
    // when a signal is received
    case sig := <-sigChan:
        // print this line telling us which signal was seen
        fmt.Println("Received signal from OS:", sig)
    }
}

Lorsque vous exécutez le script ci-dessus, il créera un canal, puis bloquera jusqu'à ce que ce canal reçoive un signal.

$ go run signals.go 
^CReceived signal from OS: interrupt

Le ^C ci-dessus est la commande clavier CTRL+C qui envoie le signal SIGINT .