Avatar ·

Por qué Go no tiene un tipo de datos "Set" incorporado y cómo implementarlo

¡Hola a todos! Soy un desarrollador principiante de Go, vengo de Python y me encontré con un problema inesperado. En Python usaba constantemente `set()` para verificar la unicidad de elementos, eliminar duplicados de una lista y realizar comprobaciones rápidas de pertenencia. Por ejemplo: ```python my_list = [1, 2, 2, 3, 3, 4] unique = set(my_list) # {1, 2, 3, 4} if 3 in unique: # comprobación O(1) print("¡Encontrado!") ``` Cuando empecé a escribir en Go, esperaba encontrar algo similar en la biblioteca estándar, pero, para mi sorpresa, no hay ni un tipo `Set` ni genéricos (hasta la versión 1.18). Tuve que escribir soluciones improvisadas: ```go // Intento 1: usar map seen := make(map[int]bool) items := []int{1, 2, 2, 3, 3, 4} for _, v := range items { seen[v] = true } // Pero esto es incómodo - hay que comprobar ok, es verboso ``` Entiendo que se puede emular un conjunto con `map[T]struct{}`, pero parece un hack. ¿Por qué los desarrolladores de Go decidieron no agregar un tipo `Set` separado en la biblioteca estándar? ¿Hay alguna