opts.go
func Shutdown(shutdownFuncs ...interface{}) Option {
	return func(s *Sentinel) error {
		s.Lock()
		defer s.Unlock()

		if s.started {
			return ErrAlreadyStarted
		}

		var err error
		s.shutdownFuncs, err = convertAndAppendContextFuncs(s.shutdownFuncs, shutdownFuncs...)
		return err
	}
}
func Shutdown(shutdownFuncs ...interface{}) Option {
	return func(s *Sentinel) error {
		s.Lock()
		defer s.Unlock()

		if s.started {
			return ErrAlreadyStarted
		}

		var err error
		s.shutdownFuncs, err = convertAndAppendContextFuncs(s.shutdownFuncs, shutdownFuncs...)
		return err
	}
}
// Shutdown is a sentinel option to add shutdown listeners.
//
// Any shutdown listener can have a type of `func()`, `func() error`, or
// `func(context.Context) error`.