ProgramlamaGo geliştiricisi / API mühendisi

Go'da type alias (tip takma adları) nasıl uygulanır ve kullanılır, bunlar yeni türlerden ne ile ayrılır ve bu ne zaman özellikle önemlidir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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 ve kaynak tip tamamen değiştirebilir
  • Yeni tip – bağımsızdır, yöntemler eklenebilir ve örtük dönüşüm mümkün değildir
  • Takma ad, tiplerin paketler arasında taşınması ve yeniden dışa aktarım için uygundur

Sorularla püf noktaları.

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

Tipik hatalar ve anti-patentler

  • Adın takma adı ile yeni tip arasındaki karışıklık
  • Takma adların işlevselliği genişletme girişimi ile yeniden kullanılması
  • Yöntemler içeren kapsüllü bir tipe ihtiyaç duyulması durumunda takma ad kullanımı

Gerçek Hayat Örneği

Olumsuz durum

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ı:

  • Kendi yöntemlerinizi tanımlama imkanı

Eksileri:

  • Taşınma sırasında tiplerin manuel olarak dönüştürülmesi gerekir, geriye dönük uyumluluk bozulur.

Olumlu durum

API'nin şeffaf bir şekilde taşınması için type alias kullanılır.

type OldType = NewType

Artıları:

  • Uyumluluk sorunları yok, mevcut kodu değiştirmeye gerek yok.

Eksileri:

  • Sadece takma ad aracılığıyla yeni yöntemler eklemek mümkün değildir.