Go dilinde geliştirici mevcut türler üzerinde kendi türlerini oluşturabilir veya kodun okunabilirliği ve dış kütüphanelerle entegrasyon için takma adlar ilan edebilir.
Meselenin geçmişi:
Go, tür sistemini basit hale getirerek yeni tür oluşturmaya (type MyInt int) ve takma ad oluşturmaya (type MyIntAlias = int) dair kavramları ayırır. Aralarında sıkça karışıklık yaşanır, bu da sistemin farklı parçaları arasında veri uyumluluğunu etkiler.
Sorun:
Yanlış tür ilan yönteminin seçilmesi, paketler arasında veri iletiminde sorunlar, dış kütüphanelerle yanlış çalışma veya takma adın kullanımı sırasında tüm yöntemlerin kaybolması gibi birçok örtük hataya neden olabilir.
Çözüm:
Kod örneği:
package main import "fmt" type MyInt int // yeni tür func (m MyInt) Double() int { return int(m) * 2 } type MyIntAlias = int // takma tür func main() { var a MyInt = 5 var b MyIntAlias = 10 fmt.Println(a.Double()) // çalışıyor //fmt.Println(b.Double()) // hata: method belirlenmemiş int üzerinde }
Ana özellikler:
Bir yapının takma adını oluşturup ona, temel yapıdan farklı yöntemler ekleyebilir miyiz?
Hayır. Yöntemler yalnızca yeni türler için tanımlanabilir, takma adlar için değil. Takma ad, aynı tür için başka bir isimdir ve programın bir kısmı türün "genişlemesi" hakkında hiçbir şey bilmez.
type MyStructAlias = SomeStruct // func (s MyStructAlias) NewMethod() {} // Hata
Temel türün yöntemleri takma ada otomatik olarak "yapışabilir" mi?
Evet, çünkü derleyici için aynı türdür. Ancak yeni yöntemlerle çalışmak mümkün değildir: takma ada benzersiz yöntemler ekleyemezsiniz.
type MyString = string // string için tüm yöntemler ve fonksiyonlar çalışır
Tür dönüşümü ile takma ad dönüşümü arasındaki fark nedir?
Yeni tür ilan ederken açık bir dönüşüm gereklidir: MyInt(x) burada x — int. Takma ada dönüşüm gerekmez — türler tamamen yer değiştirilebilir.
type A int type B = int var x int = 3 var a A = A(x) // açık dönüşüm var b B = x // örtük, int ile aynı
Geliştirici, kendi yöntemlerini ekleyebileceğini düşünerek bir dış kütüphane için takma ad türü oluşturur ve geçiş mantığını kapsüller.
Artıları:
Eksileri:
Ekip, kullanıcı tanımlayıcılarını temsil etmek için int temelli yeni bir tür oluşturur ve iş mantığını diğer tamsayı değerleri ile karıştırmamak için özel yöntemler (doğrulayıcılar, dönüştürücüler) ekler.
Artıları:
Eksileri: