Por vezes, é necessário que programas em Go tratem
sinais Unix.
Por exemplo, pode-se querer que um servidor seja desligado
graciosamente ao receber um sinal |
|
package main |
|
import ( "fmt" "os" "os/signal" "syscall" ) |
|
func main() { |
|
A notificação de sinais em Go, funciona enviando valores
do tipo |
sigs := make(chan os.Signal, 1) |
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) |
O sinal poderia ser recebido pelo |
done := make(chan bool, 1) |
Esta goroutine executa um recebimento bloqueante de sinais. Ao receber um, o sinal será impresso e então o programa será notificado que pode ser finalizado. |
go func() { |
sig := <-sigs fmt.Println() fmt.Println(sig) done <- true }() |
|
O código irá aguardar aqui até que seja recebido
o sinal esperado (como indicado pela goroutine
acima, que enviará um valor no canal |
fmt.Println("awaiting signal") <-done fmt.Println("exiting") } |
Ao executar este código, ficará bloqueado aguardando
um sinal. Ao digitar |
$ go run signals.go awaiting signal ^C interrupt exiting |
Próximo exemplo: Exit.