Historia del tema:
La aparición de los alias de tipo (type alias) en Go está relacionada con la necesidad de garantizar una transición más fluida entre versiones de API, cuando un tipo pasa de un paquete a otro. Antes de Go 1.9, solo se utilizaba la declaración de nuevos tipos, pero ahora se soportan alias de tipo.
Problema:
Muchos confunden alias y nuevo tipo, creyendo erróneamente que son idénticos, lo que lleva a errores en la conversión, métodos, y la transmisión en interfaces.
Solución:
El alias de tipo crea un nombre alternativo para un tipo existente, mientras que la declaración de un nuevo tipo es la creación de un nuevo tipo único basado en uno existente. Los alias permiten mantener la compatibilidad hacia atrás e integrar tipos antiguos y nuevos sin conversión.
Ejemplo de código:
// Nuevo tipo type MyString string // Alias de tipo type MyStringAlias = string
Características clave:
¿Se pueden agregar métodos a un tipo a través de un alias?
No, los métodos solo se pueden agregar a nuevos tipos, mientras que un alias no es un nuevo tipo, sino lo mismo que el tipo original.
type Alias = int // func (a Alias) Method() {} // ¡error!
¿Cuál es la diferencia en la comparación entre el tipo alias y el nuevo tipo?
El alias se puede comparar con el tipo base y acepta su valor sin conversión. El nuevo tipo no es compatible, incluso si se basa en el mismo tipo.
type T1 = int var a T1 = 10 // ok var b int = a // ok type T2 int var c T2 = 10 // var d int = c // error de compilación
¿Cuándo es mejor un alias que un nuevo tipo?
Cuando se necesita reexportar un tipo entre paquetes o garantizar una migración transparente de API sin recompilación del código cliente. Por ejemplo:
type OldType = NewType // el alias es más conveniente para mantener versiones antiguas de API
En un proyecto, renombrar un tipo utilizando un nuevo tipo en lugar de un alias, rompiendo la compatibilidad.
type OldType int
Ventajas:
Desventajas:
Se utiliza alias de tipo para una migración transparente de la API.
type OldType = NewType
Ventajas:
Desventajas: