32 lines
685 B
Go
32 lines
685 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
)
|
|
|
|
// ServiceRecover 服务级 panic 恢复,保证服务不宕机
|
|
func ServiceRecover() {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
// 获取堆栈信息
|
|
stackBuf := make([]byte, 4096)
|
|
stackBuf = stackBuf[:runtime.Stack(stackBuf, false)]
|
|
fmt.Printf("[服务演示] 捕获异常: %v\n堆栈信息: %s\n", err, stackBuf)
|
|
}
|
|
}()
|
|
|
|
fmt.Println("[服务演示] 处理 HTTP 请求")
|
|
handleReq()
|
|
}
|
|
|
|
func handleReq() {
|
|
panic("请求参数格式错误")
|
|
}
|
|
func main() {
|
|
// 服务级恢复演示
|
|
ServiceRecover()
|
|
println("----------------------------------------")
|
|
fmt.Println("主程序执行完成,无崩溃退出")
|
|
}
|