package main import ( "context" "os" "os/signal" "syscall" ) func concatSlices[T any](slices ...[]T) []T { var totalLen int for _, s := range slices { totalLen += len(s) } result := make([]T, totalLen) var i int for _, s := range slices { i += copy(result[i:], s) } return result } var shutdownSignals = []os.Signal{os.Interrupt, syscall.SIGTERM} // newShutdownSignalContext returns a copy of the parent context that is marked done // (its Done channel is closed) when one of the shutdownSignals arrives. func newShutdownSignalContext(parent context.Context) (context.Context, context.CancelFunc) { return signal.NotifyContext(parent, shutdownSignals...) } func waitForShutdownSignal(ctx context.Context) { ctx, cancel := newShutdownSignalContext(ctx) defer cancel() <-ctx.Done() }