// Package safe 提供带 recover 的后台 goroutine 包装: // 裸 go func() 一旦 panic 会击穿整个进程,后台任务必须经由 safe.Go 启动。 package safe import ( "log" "runtime/debug" ) // Go 启动带 recover 的后台任务;panic 只记录堆栈,不影响进程。 func Go(name string, fn func()) { go func() { defer func() { if r := recover(); r != nil { log.Printf("[safe:%s] panic recovered: %v\n%s", name, r, debug.Stack()) } }() fn() }() }