Go тилинде түрлердин суммасын (type sum) кантип ишке ашыруу керек?
sobes.tech AI
AIден жооп
Go тилинде түздөн-түз түрлөрдүн жыйындысы (type sum) үчүн колдоо жок, мисалы, кээ бир функционалдуу тилдерде (Haskell, Scala). Бирок, окшош эффектти интерфейстер жана type switch колдонуу аркылуу жетишүүгө болот.
Go'догу интерфейс методдордун топтомун сүрөттөйт, жана бул методдорду ишке ашырган ар кандай түр, интерфейсти канааттандырат. Түрлөрдүн жыйындысын ишке ашыруу үчүн, методдору жок (бош интерфейс interface{}) же жалпы методдорду камтыган интерфейс аныкталып, андан соң ишке ашыруу учурунда так түрдү аныктоо үчүн type switch колдонулат.
Мисал:
package main
import "fmt"
type Shape interface{} // бош интерфейс, ар кандай түр болушу мүмкүн
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
}
Мындайча айтканда, интерфейс жана type switch колдонуу аркылуу түрлөрдүн жыйындысына окшош жүрүм-турумду ишке ашырууга болот, анда өзгөрмө ар кандай түрдөгү маанилерди кабыл алат жана түрүнө жараша тиешелүү логика ишке ашырылат.