| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // interfaces_poly.go
- package main
- import "fmt"
- type Shaper interface {
- Area() float32
- }
- type Square struct {
- side float32
- }
- func (sq *Square) Area() float32 {
- return sq.side * sq.side
- }
- type Rectangle struct {
- length, width float32
- }
- func (r Rectangle) Area() float32 {
- return r.length * r.width
- }
- func main() {
- r := Rectangle{5, 3} // Area() of Rectangle needs a value
- q := &Square{5} // Area() of Square needs a pointer
- shapes := []Shaper{r, q}
- fmt.Println("Looping through shapes for area ...")
- for n, _ := range shapes {
- fmt.Println("Shape details: ", shapes[n])
- fmt.Println("Area of this shape is: ", shapes[n].Area())
- }
- }
- /* Output:
- Looping through shapes for area ...
- Shape details: {5 3}
- Area of this shape is: 15
- Shape details: &{5}
- Area of this shape is: 25
- */
|