90// Commonly used with a `defer`.
91func LogPanic() {
92 if e := recover(); e != nil {
93 log.Fatal("panic", zap.Reflect("recover", e)) 94 }
95}
96
421 defer tick.Stop()
422 totalMem, err := memory.MemTotal()
423 if err != nil {
424 log.Fatal("fail to get total memory:%s", zap.Error(err)) 425 }
426 log.Info("memory info", zap.Uint64("total-mem", totalMem))
427 cfg := c.opt.GetPDServerConfig()
65func NewService[T ConfigProvider](svr bs.Server) registry.RegistrableService {
66 server, ok := svr.(*Server)
67 if !ok {
68 log.Fatal("create tso server failed") 69 }
70 return &Service{
71 Server: server,
621 }()
622
623 if err := svr.Run(); err != nil {
624 log.Fatal("run server failed", errs.ZapError(err))625 }
626
627 <-ctx.Done()
593 if err == nil {
594 log.ReplaceGlobals(cfg.Logger, cfg.LogProps)
595 } else {
596 log.Fatal("initialize logger error", errs.ZapError(err))597 }
598 // Flushing any buffered log entries
599 log.Sync()
Packages exposing functions that can stop program execution by exiting are hard to reuse. Program exits in functions other than main() or init() are not encouraged.
func nonMainFunc() {
safelyExit := true // somehow arrive at this value
if safelyExit {
os.Exit(0)
}
}
func main() {
nonMainFunc()
}
func nonMainFunc() bool {
safelyExit := true // somehow arrive at this value
}
func main() {
safelyExit := nonMainFunc()
if safelyExit {
os.Exit(0)
}
}