[Loki] memory/columnar API를 Go 관용구에 맞게 리팩터링
PR #20622 - chore: make memory, columnar APIs more idiomatic
들어가며
Grafana Loki의 columnar 데이터 처리 패키지에서 타입 생성자 함수들이 Make*와 New* 두 가지 명명 규칙을 혼용하고 있었습니다. Go 커뮤니티에서는 생성자 함수에 New* 접두사를 사용하는 것이 관용적(idiomatic)입니다. 이 PR은 모든 Make* 함수를 New*로 통일하고, columnar.NewRecordBatch가 포인터를 반환하도록 변경합니다.
핵심 코드 분석
Before
alloc = memory.MakeAllocator(nil)
validity := memory.MakeBitmap(alloc, totalLen)
values := memory.MakeBuffer[T](alloc, totalLen)
return MakeNull(validity), nil
return MakeBool(values, validity), nil
return MakeNumber[T](values.Data(), validity), nil
return MakeUTF8(data.Data(), offsets, validity), nil
After
alloc = memory.NewAllocator(nil)
validity := memory.NewBitmap(alloc, totalLen)
values := memory.NewBuffer[T](alloc, totalLen)
return NewNull(validity), nil
return NewBool(values, validity), nil
return NewNumber[T](values.Data(), validity), nil
return NewUTF8(data.Data(), offsets, validity), nil
변경 대상:
memory.MakeAllocator->memory.NewAllocatormemory.MakeBitmap->memory.NewBitmapmemory.MakeBuffer->memory.NewBuffercolumnar.MakeNull->columnar.NewNullcolumnar.MakeBool->columnar.NewBoolcolumnar.MakeNumber->columnar.NewNumbercolumnar.MakeUTF8->columnar.NewUTF8
왜 이게 좋은가
- Go 관용구 준수:
New*는 Go에서 생성자의 표준 접두사입니다. 표준 라이브러리(sync.NewMutex,bytes.NewBuffer등)가 모두 이 패턴을 따릅니다. - API 일관성: 같은 패키지 내에서
Make*와New*가 혼용되면 개발자 혼란을 유발합니다. - 포인터 반환 통일:
NewRecordBatch가 포인터를 반환하도록 변경하여 다른New*함수와 시그니처를 맞춥니다. - +209/-209 순수 리네이밍: 로직 변경 없이 네이밍만 정리한 안전한 리팩터링입니다.
참고 자료
관련 포스트
PR Analysis 의 다른글
- 이전글 [pydantic-ai] OpenAI prompt_cache_retention 리터럴 타입 오류 수정
- 현재글 : [Loki] memory/columnar API를 Go 관용구에 맞게 리팩터링
- 다음글 [Open WebUI] 필터 함수 배치 조회로 N+1 쿼리 제거
댓글