Sorunun Tarihi:
Go'daki tip takma adlarının (type alias) ortaya çıkışı, API sürümleri arasında daha pürüzsüz bir geçiş sağlama gerekliliğiyle ilgilidir; bu, bir tipin bir paketten diğerine geçişidir. Go 1.9'dan önce yalnızca yeni tiplerin ilanı kullanılıyordu, ancak şimdi type alias'lar desteklenmektedir.
Sorun:
Birçok kişi takma adları ve yeni tipleri karıştırıyor - bunların aynı olduğunu yanlış bir şekilde düşünüyorlar, bu da dönüşümlerde, yöntemlerde, arayüzlere aktarımda hatalara yol açıyor.
Çözüm:
Tip takma adı mevcut bir tipe alternatif bir ad yaratırken, yeni tip ilanı mevcut bir temel alarak yeni bir benzersiz tip oluşturur. Takma adlar, geriye dönük uyumluluğu koruyarak eski ve yeni tipleri dönüşüm olmadan entegre etmeyi sağlar.
Kod örneği:
// Yeni tip type MyString string // Tip takma adı type MyStringAlias = string
Anahtar Özellikler:
Takma ad üzerinden tipe yöntem eklemek mümkün mü?
Hayır, yöntemler yalnızca yeni tipler eklenebilir; bir takma ad yeni bir tip değildir ve mevcut Tip ile aynı olarak kabul edilir.
type Alias = int // func (a Alias) Method() {} // hata!
Takip edilen tiplerin takma adı ile yeni tip arasındaki fark nedir?
Takma ad, temel tip ile karşılaştırılabilir ve onun değerini dönüşüm olmadan alabilir. Yeni tip, aynı tipten aynı olsa bile uyumlu değildir.
type T1 = int var a T1 = 10 // tamam var b int = a // tamam type T2 int var c T2 = 10 // var d int = c // derleme hatası
Ne zaman takma ad, yeni tipten daha iyidir?
Paketler arasında tiplerin yeniden dışa aktarımı gerektiğinde veya müşteri kodunu yeniden derlemeye gerek kalmadan API'nin şeffaf bir şekilde taşınması gerektiğinde. Örneğin:
type OldType = NewType // takma ad, eski API sürümlerini desteklemek için daha uygundur
Bir projede, tip yeni bir tip ile değil, bir takma ad ile yeniden adlandırılıyor, bu da uyumluluğu kırıyor.
type OldType int
Artıları:
Eksileri:
API'nin şeffaf bir şekilde taşınması için type alias kullanılır.
type OldType = NewType
Artıları:
Eksileri: