GO · 컬렉션
링 버퍼 (container/ring)
container/ring으로 고정 크기 순환 버퍼를 구현합니다. 최근 N개 이벤트 추적에 유용합니다.
컬렉션고급ringcircular-buffercontainerfixed-size
핵심 설명
container/ring으로 고정 크기 순환 버퍼를 구현합니다. 최근 N개 이벤트 추적에 유용합니다.
Go code
package main
import (
"container/ring"
"fmt"
)
func main() {
// 크기 5인 링 버퍼
r := ring.New(5)
// 값 채우기
for i := 1; i <= 5; i++ {
r.Value = fmt.Sprintf("이벤트-%d", i)
r = r.Next()
}
// 순회
r.Do(func(v any) {
if v != nil {
fmt.Println(v)
}
})
// 새 이벤트 추가 (가장 오래된 것 덮어쓰기)
r.Value = "이벤트-6"
r = r.Next()
fmt.Println("--- 업데이트 후 ---")
r.Do(func(v any) {
if v != nil {
fmt.Println(v)
}
})
fmt.Println("링 크기:", r.Len())
}학습 팁
링 버퍼는 로그 롤링, 최근 N개 메트릭 추적, 순환 스케줄링에 적합합니다. 메모리를 고정 크기로 유지할 수 있습니다.
주의할 점
ring.New의 값은 nil로 초기화됩니다. Do에서 nil 체크를 하지 않으면 패닉이 발생할 수 있습니다.
자주 묻는 질문
링 버퍼 (container/ring)란 무엇인가요?
container/ring 으로 고정 크기 순환 버퍼를 구현합니다. 최근 N개 이벤트 추적에 유용합니다.
링 버퍼 (container/ring) 학습 시 주의할 점은 무엇인가요?
ring.New 의 값은 nil 로 초기화됩니다. Do 에서 nil 체크를 하지 않으면 패닉이 발생할 수 있습니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.