grafana/loki

Replace `go.uber.go/atomic` with Go standard library `sync/atomic`

Open

#20.673 aperta il 4 feb 2026

Vedi su GitHub
 (3 commenti) (0 reazioni) (0 assegnatari)Go (3997 fork)batch import
good first issue

Metriche repository

Star
 (28.187 star)
Metriche merge PR
 (Merge medio 5g 20h) (522 PR mergiate in 30 g)

Descrizione

Summary

We currently have a linter rule that blocks usage of sync/atomic and forces us to use go.uber.go/atomic instead. This rule was originally added because sync/atomic required atomic operations on primitive types, which was considered error-prone.

However, since Go 1.19, the standard library sync/atomic package now includes typed wrappers (e.g., atomic.Uint32, atomic.Int64, atomic.Bool, etc.) that provide the same safety guarantees as go.uber.go/atomic. This makes the uber package redundant.

Context

Prometheus is also making this transition:

Proposed Changes

  1. Remove the linter rule that blocks sync/atomic
  2. Migrate all go.uber.go/atomic usage to the standard library sync/atomic typed wrappers
  3. Configure a linter rule to block the old-style atomic functions that operate on primitive types (e.g., atomic.AddInt64, atomic.LoadUint32) to ensure we only use the new typed wrappers and avoid accidental misuse

This approach gives us:

  • Fewer external dependencies
  • Alignment with the broader Go ecosystem
  • Same safety guarantees we had with uber/atomic

References

Guida contributor