Go 언어 개발팀이 2025년 말 구성된 컬렉션 워킹 그룹(Collections working group)의 성과를 바탕으로, Go 1.28 버전에 제네릭 컬렉션 타입을 표준 라이브러리에 추가하는 제안을 발표했습니다. 이 제안은 Go 언어의 실용성과 단순성이라는 핵심 원칙을 유지하면서, 개발자들이 자주 사용하는 다양한 자료구조를 표준 라이브러리에서 직접 제공하여 개발 효율성을 높이는 데 중점을 둡니다. 이는 Go 1.18의 제네릭(generics) 도입과 Go 1.23의 이터레이터(iterators) 추가 이후, 라이브러리 정의 타입이 내장 타입과 유사한 편의성을 제공할 수 있게 된 변화에 발맞춘 것입니다.
이번 제안에는 여러 중요한 자료구조들이 포함됩니다. 먼저, 사용자 정의 해시 함수와 동등성 관계를 표현하는 `hash/maphash.Hasher` 인터페이스가 도입되어, 슬라이스(slice)나 맵(map)처럼 비교 불가능한 키 타입에도 유연하게 대응할 수 있게 됩니다. 이를 활용한 `container/hash.Map[K,V]`과 `container/hash.Set[T]`은 사용자 정의 해시 기반의 맵과 셋을 제공합니다. 또한, 비교 가능한 요소들을 위한 표준 셋 타입인 `container/set.Set[T]`이 `map[T]struct{}` 기반으로 구현되어 합집합(Union), 교집합(Intersection) 등 일반적인 셋 연산을 편리하게 지원하며, 기존 코드와의 호환성을 위해 `container/mapset` 패키지도 제공됩니다. 이 외에도 균형 이진 트리를 기반으로 하는 `container/ordered.Map[K,V]`과 기존 힙(heap) API의 사용성을 개선한 `container/heap/v2.Heap` 등 핵심적인 컬렉션 타입들이 포함되어 개발자들이 더욱 다양한 시나리오에서 Go 언어를 효율적으로 활용할 수 있게 될 것입니다.
이러한 표준 컬렉션 타입의 추가는 Go 언어 생태계에 큰 영향을 미칠 것으로 예상됩니다. 기존에는 개발자들이 직접 구현하거나 서드파티 라이브러리를 사용해야 했던 많은 자료구조들이 공식적으로 지원됨으로써, 코드의 일관성과 유지보수성이 향상될 것입니다. 특히, 제네릭을 활용하여 타입 안전성을 확보하고, 추상적인 컬렉션 제약 인터페이스를 통해 다양한 구체적인 컬렉션 타입에 걸쳐 작동하는 헬퍼 함수를 작성할 수 있게 되어 Go 언어의 유연성과 확장성이 크게 증대될 것입니다. 이는 Go 언어가 더 복잡하고 다양한 애플리케이션 개발에 활용될 수 있는 기반을 마련하며, 개발자들이 더욱 생산적으로 작업할 수 있도록 도울 것입니다.