Junior — Middle
Go dilinde tür toplamı (type sum) nasıl uygulanabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde doğrudan toplam türler (type sum) desteği yoktur, örneğin bazı fonksiyonel dillerde (Haskell, Scala) olduğu gibi. Ancak, benzer bir etki, arayüzler ve type switch kullanılarak elde edilebilir.
Go'da bir arayüz, metodların bir kümesini tanımlar ve bu metodları uygulayan herhangi bir tür, arayüzü karşılar. Toplam türleri uygulamak için, metodları olmayan (boş arayüz interface{}) veya ortak metodlara sahip bir arayüz tanımlanabilir ve ardından çalışma zamanında belirli türü belirlemek için type switch kullanılabilir.
Örnek:
package main
import "fmt"
type Shape interface{} // boş arayüz, herhangi bir tür olabilir
func area(s Shape) float64 {
switch v := s.(type) {
case Circle:
return 3.14 * v.Radius * v.Radius
case Rectangle:
return v.Width * v.Height
default:
return 0
}
}
type Circle struct {
Radius float64
}
type Rectangle struct {
Width, Height float64
}
func main() {
c := Circle{Radius: 5}
r := Rectangle{Width: 3, Height: 4}
fmt.Println(area(c)) // 78.5
fmt.Println(area(r)) // 12
}
Bu şekilde, arayüz ve type switch, farklı türlerdeki değerleri alabilen ve türe bağlı olarak uygun mantığı çalıştıran toplam türe benzer bir davranış sağlar.