goбъектное-3
Для комплекта еще пример switch по типу значения:
func sumCoor(p Point) float64 {
switch p := p.(type) {
case Point2D: return p.x+p.y
case Point3D: return sumCoor(p.Point2D) + p.z
}
panic ("unknown point type")
}
func main() {
fmt.Println(sumCoor(p2))
fmt.Println(sumCoor(p3))
}
Смысл понятен, единственное, что может стоит пояснить - p в данном операторе переобъявляется (можно дать и другое имя, но данный вариант в go является идиоматическим) и в таком контексте новая переменная в каждой ветке рассматривается как имеющая соответствующий метке тип.
На сам деле точный аналог оператора
в Simula-67, ЕВПОЧЯ