¿Qué medios de programación genérica existen?
sobes.tech AI
Respuesta de la IA
En Golang existen las siguientes herramientas de programación genérica (genéricos):
-
Tipos parametrizados: Permiten crear estructuras, interfaces y funciones que pueden trabajar con diferentes tipos de datos sin especificarlos de forma rígida en tiempo de compilación. Los tipos de datos se indican entre corchetes después del nombre del tipo o función.
// Ejemplo de estructura con tipo parametrizado type Stack[T any] struct { elements []T } // Ejemplo de función con tipos parametrizados func Map[T, U any](collection []T, f func(T) U) []U { result := make([]U, len(collection)) for i, item := range collection { result[i] = f(item) } return result } -
Restricciones de tipos (Type Constraints): Definen un conjunto de tipos que pueden ser utilizados como parámetros genéricos. Permiten limitar la universalidad de los tipos y garantizar la seguridad de las operaciones.
- Interfaces: Cualquier interfaz en sí misma es una restricción de tipo.
- Interfaces combinadas: Permiten combinar varios tipos o interfaces mediante el operador
|.
// Ejemplo de restricción de tipo usando una interfaz combinada type Number interface { int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 } // Función que usa la restricción de tipo func Add[T Number](a, b T) T { return a + b }
Estas herramientas se añadieron en Go 1.18. Antes de eso, para implementar algo similar a los genéricos, se usaban interfaces (interface{}) y reflexión, lo que reducía la seguridad de tipos y el rendimiento.