Files
utodo/pkg/tool/must.go
2025-07-13 22:57:57 +08:00

54 lines
828 B
Go

package tool
import (
"context"
"gitea.loveuer.com/yizhisec/packages/logger"
"sync"
)
func Must(errs ...error) {
for _, err := range errs {
if err != nil {
logger.Panic(err.Error())
}
}
}
func MustWithData[T any](data T, err error) T {
Must(err)
return data
}
func MustStop(ctx context.Context, stopFns ...func(ctx context.Context) error) {
if len(stopFns) == 0 {
return
}
ok := make(chan struct{})
wg := &sync.WaitGroup{}
wg.Add(len(stopFns))
for _, fn := range stopFns {
go func() {
defer wg.Done()
if err := fn(ctx); err != nil {
logger.ErrorCtx(ctx, "stop function failed, err = %s", err.Error())
}
}()
}
go func() {
select {
case <-ctx.Done():
logger.FatalCtx(ctx, "stop function timeout, force down")
case _, _ = <-ok:
return
}
}()
wg.Wait()
close(ok)
}