Sobes.tech
Middle+

¿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):

  1. 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
    }
    
  2. 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.