Skip to content

Instantly share code, notes, and snippets.

@diego-augusto
Created July 30, 2022 05:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save diego-augusto/bdfeb8f60ae3b4bb513ea1da2cf60d06 to your computer and use it in GitHub Desktop.
Save diego-augusto/bdfeb8f60ae3b4bb513ea1da2cf60d06 to your computer and use it in GitHub Desktop.
Graceful Shutdown in Go
package main
import (
"context"
"log"
"os"
"os/signal"
"sync"
"time"
)
func main() {
// ctx, cancel := context.WithCancel(context.Background())
// defer cancel()
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
for {
select {
case <-ctx.Done():
log.Println("Break the loop 1")
return
case <-time.After(1 * time.Second):
log.Println("loop 1")
}
}
}()
wg.Add(1)
go func() {
defer wg.Done()
for {
select {
case <-ctx.Done():
log.Println("Break the loop 2")
return
case <-time.After(2 * time.Second):
log.Println("loop 2")
}
}
}()
wg.Wait()
log.Println("Finishing as a pro!")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment