Чӣ гуна метавон ҷамъоварии намудҳои гуногун (type sum)-ро дар забони Go амалӣ кард؟
sobes.tech AI
Ҷавоб аз AI
Дар Go ҳеҷ supportи мустақим барои навъҳои ҷамъ (type sum) вуҷуд надорад, мисли баъзе забонҳои функсионалӣ (Haskell, Scala). Аммо, таъсири монандро бо истифода аз интерфейсҳо ва switch-и навъҳо ба даст овардан мумкин аст.
Интерфейс дар Go маҷмӯи методҳоро тавсиф мекунад, ва ҳар навъе, ки ин методҳоро иҷро мекунад, ба интерфейс қаноатманд аст. Барои иҷрои навъҳои ҷамъ, метавон интерфейси бе методҳо (интерфейси холӣ interface{}) ё бо методҳои умумӣ муайян кард, ва сипас барои муайян кардани навъи мушаххас дар вақти иҷрои, 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
}
Бо ин роҳ, интерфейс ва switch-и навъҳо имкон медиҳанд, ки рафторе, ки монанд ба ҷамъ кардани навъҳо аст, амалӣ карда шавад, ки дар он тағирёбанда метавонад арзишҳои навъҳои гуногунро қабул кунад ва вобаста ба навъ, логикаи дахлдор иҷро мешавад.