ringbuffer

package
v0.7.5 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2026 License: Apache-2.0 Imports: 1 Imported by: 0

Documentation

Overview

Package ringbuffer 提供定长环形缓冲:只保留最近 N 条,写满后覆盖最旧的, O(1) 追加。泛型 Ring[T]。

典型:直播间"最近 50 条弹幕"、玩家"最近 20 场战绩"、"最近 100 行滚动日志"、 监控采样窗口。这类"只关心最近若干条、旧的自动丢弃"的需求,用 slice 手撸要反复 裁剪且容易写错边界,本包封装成固定内存、无分配增长的环。

提供两个类型:

  • Ring[T]:非并发安全,零开销,单 goroutine 或调用方自行加锁时用;
  • SyncRing[T]:内置 RWMutex 的并发安全版,读多写少场景直接用。

容量固定(构造时定),永不扩容;追加满后覆盖最旧元素。零值不可用,用 New 构造。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Ring

type Ring[T any] struct {
	// contains filtered or unexported fields
}

Ring 定长环形缓冲(非并发安全)。零值不可用,用 New 构造。

func New

func New[T any](capacity int) *Ring[T]

New 创建容量为 capacity 的环形缓冲。capacity<=0 会被置为 1。

func (*Ring[T]) Cap

func (r *Ring[T]) Cap() int

Cap 返回容量。

func (*Ring[T]) Clear

func (r *Ring[T]) Clear()

Clear 清空(容量不变)。

func (*Ring[T]) Full

func (r *Ring[T]) Full() bool

Full 返回是否已写满(此后 Push 会覆盖最旧)。

func (*Ring[T]) Len

func (r *Ring[T]) Len() int

Len 返回当前元素数。

func (*Ring[T]) Newest

func (r *Ring[T]) Newest() (T, bool)

Newest 返回最新元素;为空返回零值 + false。

func (*Ring[T]) Oldest

func (r *Ring[T]) Oldest() (T, bool)

Oldest 返回最旧元素;为空返回零值 + false。

func (*Ring[T]) Push

func (r *Ring[T]) Push(v T)

Push 追加一个元素;缓冲已满则覆盖最旧的那个。

func (*Ring[T]) Recent

func (r *Ring[T]) Recent(n int) []T

Recent 返回最近 n 条(从新到旧)。n 超过当前元素数则返回全部(仍从新到旧)。

func (*Ring[T]) Slice

func (r *Ring[T]) Slice() []T

Slice 按从旧到新的顺序返回当前所有元素的拷贝(不含未填充的空位)。

type SyncRing

type SyncRing[T any] struct {
	// contains filtered or unexported fields
}

SyncRing 是 Ring 的并发安全封装(RWMutex)。零值不可用,用 NewSync 构造。

func NewSync

func NewSync[T any](capacity int) *SyncRing[T]

NewSync 创建并发安全的环形缓冲。

func (*SyncRing[T]) Cap

func (s *SyncRing[T]) Cap() int

Cap 容量。

func (*SyncRing[T]) Clear

func (s *SyncRing[T]) Clear()

Clear 清空(写锁)。

func (*SyncRing[T]) Len

func (s *SyncRing[T]) Len() int

Len 当前元素数(读锁)。

func (*SyncRing[T]) Newest

func (s *SyncRing[T]) Newest() (T, bool)

Newest 最新元素(读锁)。

func (*SyncRing[T]) Push

func (s *SyncRing[T]) Push(v T)

Push 追加(写锁)。

func (*SyncRing[T]) Recent

func (s *SyncRing[T]) Recent(n int) []T

Recent 最近 n 条,从新到旧(读锁)。

func (*SyncRing[T]) Slice

func (s *SyncRing[T]) Slice() []T

Slice 从旧到新的拷贝(读锁)。

Jump to

Keyboard shortcuts

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