init
This commit is contained in:
55
app/app.go
Normal file
55
app/app.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
}
|
||||
|
||||
func New() *App {
|
||||
return &App{}
|
||||
}
|
||||
|
||||
func (app *App) Run() error {
|
||||
// Context pour gérer l'arrêt gracieux
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
// Channel pour capturer les signaux d'arrêt (Ctrl+c, etc...)
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
// Channel pour les erreurs
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
// Lancer les app ici
|
||||
go app.runWorker(ctx, errChan)
|
||||
|
||||
fmt.Println("App started, press CTRL+C to stop...")
|
||||
|
||||
select {
|
||||
case err := <-errChan:
|
||||
return fmt.Errorf("error in the app: %w", err)
|
||||
case sig := <-sigChan:
|
||||
fmt.Printf("\nSIGTERM received: %v, stopping app...\n", sig)
|
||||
cancel() // Annule le context pour arrêter les goroutines
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (app *App) runWorker(ctx context.Context, err_chan chan<- error) {
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
fmt.Println("Worker stopped")
|
||||
return
|
||||
default:
|
||||
// Logique métier ...
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user