PHpullh
학습 라이브러리/Go/링 버퍼 (container/ring)

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 체크를 하지 않으면 패닉이 발생할 수 있습니다.