Achtergrond:
De introductie van type-aliasen in Go kwam voort uit de noodzaak om een soepelere overgang tussen versies van API's te waarborgen, wanneer een type van het ene pakket naar het andere overgaat. Voor Go 1.9 werden alleen nieuwe types gedeclareerd, nu worden ook type-aliasen ondersteund.
Probleem:
Velen verwarren alias en nieuwe types – zij beschouwen ze onterecht als identiek, wat leidt tot fouten bij conversie, methoden en het doorgeven aan interfaces.
Oplossing:
Type-alias creëert een alternatieve naam voor een bestaand type, terwijl declaratie van een nieuw type een nieuw uniek type op basis van een bestaand type creëert. Aliassen helpen om achterwaartse compatibiliteit te behouden en oude en nieuwe types te integreren zonder conversie.
Voorbeeldcode:
// Nieuw type type MyString string // Type-alias type MyStringAlias = string
Belangrijke kenmerken:
Kan ik methoden aan een type toevoegen via alias?
Nee, methoden kunnen alleen aan nieuwe types worden toegevoegd, en een alias is geen nieuw type, maar hetzelfde als het oorspronkelijke Type.
type Alias = int // func (a Alias) Method() {} // fout!
Wat is het verschil in vergelijking tussen types alias en nieuwe types?
Alias is vergelijkbaar met het basistype en accepteert de waarde zonder conversie. Een nieuw type is niet compatibel, zelfs als het is gebaseerd op hetzelfde type.
type T1 = int var a T1 = 10 // ok var b int = a // ok type T2 int var c T2 = 10 // var d int = c // compilatiefout
Wanneer is alias beter dan een nieuw type?
Wanneer herexport van types tussen pakketten nodig is of een transparante migratie van API's zonder recompilatie van cliëntcode moet worden verzekerd. Bijvoorbeeld:
type OldType = NewType // alias is handiger voor het ondersteunen van oude versies van API
In een project wordt een type hernoemd met behulp van een nieuw type, in plaats van een alias, wat de compatibiliteit breekt.
type OldType int
Voordelen:
Nadelen:
Type alias wordt gebruikt voor een transparante migratie van API
type OldType = NewType
Voordelen:
Nadelen: