package timer import ( "fmt" "strings" "time" ) // Tracker 负责耗时打点追踪 type Tracker struct { start time.Time last time.Time laps []Lap } type Lap struct { Label string Duration time.Duration At time.Time } // Start 开始计时 func Start() *Tracker { now := time.Now() return &Tracker{start: now, last: now} } // Record 记录一段耗时 (Lap),并返回段耗时 func (t *Tracker) Record(label string) time.Duration { now := time.Now() d := now.Sub(t.last) t.last = now t.laps = append(t.laps, Lap{Label: label, Duration: d, At: now}) return d } // Stop 结束计时,返回总持续时间 func (t *Tracker) Stop() time.Duration { return time.Since(t.start) } // Summarize 返回所有记录段 func (t *Tracker) Summarize() []Lap { return t.laps } // Describe 返回格式化后的统计字符串 func (t *Tracker) Describe() string { var sb strings.Builder total := t.Stop() for i, lap := range t.laps { if i > 0 { sb.WriteString("; ") } sb.WriteString(fmt.Sprintf("[%s] %v", lap.Label, lap.Duration)) } if len(t.laps) > 0 { sb.WriteString("; ") } sb.WriteString(fmt.Sprintf("Total: %v", total)) return sb.String() }