|
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.