Sobes.tech
Junior — Middle

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.