package spool import ( "fmt" "os" "reflect" "runtime/debug" "strings" ) var ( Stderr = os.Stderr Stdout = os.Stdout ) type empty struct{} const PanicErrorCode = 8 var Print = func(format string, values ...any) (any, error) { return fmt.Fprintf(Stdout, format, values...) } var Warn = func(format string, values ...any) (any, error) { return fmt.Fprintf(Stderr, format, values...) } var Panic = func(code ExitCode, format string, values ...any) (any, error) { pkg := reflect.TypeOf(empty{}).PkgPath() v, err := fmt.Fprintf(Stderr, format, values...) st := strings.Split(string(debug.Stack()), "\n") for i, l := range st { if strings.Contains(l, pkg) { st = st[i:] break } } _, _ = Warn("%s\n", strings.Join(st, "\n")) os.Exit(PanicErrorCode) return v, err }