본문 바로가기
Backend2026년 6월 2일3분 읽기

Go 1.23 generic types — 6개월 production 패턴

YS
김영삼
조회 1226
Go 1.23 generic types — 6개월 production 패턴

핵심 요약

Go 1.23 generic types 안정 6개월. 사내 12개 라이브러리에 generic 적용. interface{} + 캐스팅 패턴 사라짐, 코드 중복 -52%, 컴파일 시간 +14%(받아들일 수준).

1. 1.23 generic 핵심 — Type Parameters

// Before — interface{}
func MapAny(s []interface{}, f func(interface{}) interface{}) []interface{} {
  r := make([]interface{}, len(s))
  for i, v := range s { r[i] = f(v) }
  return r
}

// 1.23 — generic
func Map[T, U any](s []T, f func(T) U) []U {
  r := make([]U, len(s))
  for i, v := range s { r[i] = f(v) }
  return r
}
ints := Map([]int{1, 2, 3}, func(n int) string { return strconv.Itoa(n) })

2. constraints — 자주 쓰는 패턴

import "golang.org/x/exp/constraints"

func Max[T constraints.Ordered](a, b T) T {
  if a > b { return a }
  return b
}
Max(3, 5)         // int
Max("hi", "bye")  // string

3. range over function — 1.23 새 기능

func Keys[K comparable, V any](m map[K]V) func(yield func(K) bool) {
  return func(yield func(K) bool) {
    for k := range m {
      if !yield(k) { return }
    }
  }
}
for k := range Keys(myMap) { fmt.Println(k) }

4. 데이터 — 12 라이브러리

지표BeforeAfter
총 LoC28,40013,700
타입 단언 panic월 ~6건0
빌드 시간14s16s
바이너리 크기8.2MB8.8MB

5. 함정

  • Generic 메서드 미지원 — type parameter는 func에만, struct method는 안 됨. 우회는 generic struct + 일반 method
  • Type inference — 일부 케이스 추론 실패, 명시 type 인자 [int] 필요
  • Constraint 작성 — interface 정의 학습, golang.org/x/exp/constraints 활용
  • 에러 메시지 — generic 관련 컴파일 에러 메시지 종종 헷갈림, 1.24에서 개선 예정

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록