|
Někdy bychom chtěli aby naše Go programy inteligentně
ošetřovali Unixové signály.
Například, můžeme chtít aby server we might want a server to elegantně
skončil když dostaneme signál |
|
package main
|
|
import "fmt"
import "os"
import "os/signal"
import "syscall"
|
|
func main() {
|
|
|
Go notifikace o signálech pracuje tak, že posílá
hodnoty |
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
|
|
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
Tato goroutina provádí blokující příjem signálů. Když nějaký dostané tak ho vypíše a oznámí programu že může skončit. |
go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
done <- true
}()
|
|
Program zde bude čekat dokud nedostane
očekávaný signál (jak je naznačeno v gorutině výše
posílající hodnotu když je |
fmt.Println("awaiting signal")
<-done
fmt.Println("exiting")
}
|
|
Když spustíme tento program tak bude blokovat a čekat
na signál. Stisknutím |
$ go run signals.go
awaiting signal
^C
interrupt
exiting
|
Další příklad: Exit.