package main import "fmt" type Shape interface { Area() float64 Name() string } type triangle struct { base float64 height float64 } type rectangle struct { length float64 width float64 } type square struct { side float64 } func (t triangle) Area() float64 { return (t.base * t.height) / 2 } func (t triangle) Name() string { return "triangle" } func (r rectangle) Area() float64 { return r.length * r.width } func (r rectangle) Name() string { return "rectangle" } func (s square) Area() float64 { return s.side * s.side } func (s square) Name() string { return "square" } func printShapeDetails(shapes ...Shape) { for _, item := range shapes { fmt.Printf("The area of %s is %.2f\n", item.Name(), item.Area()) } } func main() { t := triangle{15.5, 20.1} r := rectangle{20, 10} s := square{10} printShapeDetails(t, r, s) }