Go tilida tur variantlari yig'indisini (type sum) qanday amalga oshirish mumkin?
sobes.tech AI
AIdan javob
Go tilida toʻgʻridan-toʻgʻri turlar yigʻindisi (type sum) uchun qoʻllab-quvvatlash yoʻq, masalan, ba'zi funksional tillarda (Haskell, Scala). Biroq, shunga oʻxshash effektni interfeyslar va type switch yordamida erishish mumkin.
Go'da interfeys metodlar to'plamini tavsiflaydi, va bu metodlarni amalga oshiradigan har qanday tur interfeysni qanoatlantiradi. Turlar yigʻindisini amalga oshirish uchun, metodlari bo'lmagan (bo'sh interfeys interface{}) yoki umumiy metodlarga ega interfeysni aniqlash mumkin, va keyin runtimeda aniq turni aniqlash uchun type switchdan foydalanish mumkin.
Misol:
package main
import "fmt"
type Shape interface{} // bo'sh interfeys, har qanday tur bo'lishi mumkin
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
}
Shu tarzda, interfeys va type switch turlar yigʻindisi kabi xulq-atvorni amalga oshirishga imkon beradi, bunda o'zgaruvchi turli turlardagi qiymatlarni qabul qilishi mumkin va turga qarab mos mantiq bajariladi.