grafana/loki

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

Open

#20,673 建立於 2026年2月4日

在 GitHub 查看
 (3 留言) (0 反應) (0 負責人)Go (28,187 star) (3,997 fork)batch import
good first issue

描述

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

貢獻者指南