Help us shape the future of Go! Take the 2026 Go Developer Survey

perf

package
v0.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 11, 2026 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type LoopSpan

type LoopSpan struct {
	// contains filtered or unexported fields
}

LoopSpan wraps a Span that groups loop iterations. Each call to Iteration creates a child span representing one pass through the loop.

Usage:

ctx, loop := perf.StartLoop(ctx, "process_sessions")
for _, item := range items {
    iterCtx, iterSpan := loop.Iteration(ctx)
    doWork(iterCtx, item)
    iterSpan.End()
}
loop.End()

func StartLoop

func StartLoop(ctx context.Context, name string, attrs ...slog.Attr) (context.Context, *LoopSpan)

StartLoop begins a new loop span. The returned context contains the loop span and should be passed to Iteration. Call loop.End() after the loop completes.

func (*LoopSpan) End

func (l *LoopSpan) End()

End completes the loop span, auto-ending any unended iteration children first so their durations are captured at loop-end time rather than deferring to the root span's End() (which may run much later).

func (*LoopSpan) Iteration

func (l *LoopSpan) Iteration(ctx context.Context) (context.Context, *Span)

Iteration creates a child span for a single loop iteration. The caller must call End() on the returned span when the iteration completes.

type Span

type Span struct {
	// contains filtered or unexported fields
}

Span tracks timing for an operation and its substeps. A Span is not safe for concurrent use from multiple goroutines.

func Start

func Start(ctx context.Context, name string, attrs ...slog.Attr) (context.Context, *Span)

Start begins a new span. If ctx already has a span, the new one becomes a child. Returns the updated context and the span. Call span.End() when the operation completes.

func (*Span) End

func (s *Span) End()

End completes the span. For root spans, emits a single DEBUG log line with the full timing tree. For child spans, records the duration only. Safe to call multiple times -- subsequent calls are no-ops.

func (*Span) RecordError

func (s *Span) RecordError(err error)

RecordError marks the span as errored. Only the first non-nil error is stored; subsequent calls are no-ops. Call this before End() on error paths.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL