1

I have an interface

type Shape interface {
    area() float32
    circumference() float32
}

I want to create different shapes such as a circle and a rectangle, for the circle I need to know the radius, and for the rectangle the 2 sides. So the code for each is like the following:

type DataCircle struct {
     radius float
}

(*DataCircle) area() float32 {
    return 3.14 * DataCircle.radius * DataCircle.radius;
}

(*DataCircle) circumference() float32 {
    return 2 * 3.14 * DataCircle.radius;
}

Similarly we have code for a rectangle which implement the interface Shape, with the following struct

type DataRectangle struct {
     side1 float
     side2 float
}

I want to create many different Rectangles and many different Circles, each one has different radius/sides. In the end I want to put them in a single array and be able to do something like the following

for _, shape := range all_shapes_in_array {
    fmt.Printf("%f %f", shape.area(), shape.circumference())
}

In a normal object oriented language this is pretty straight forward, but how do I do it in Golang?

1 Answer 1

2

As long as your DataCircle and DataRectangle structs implement the Shape interface you will be able to create an array/slice of type Shape and iterate through it.

If you already have them implementing Shape then all you need to do is this:

circle1 := &DataCircle{1}
circle2 := &DataCircle{2}
rec1 := &DataRectangle{1, 1}
rec2 := &DataRectangle{4, 1}

all_shapes_in_array := []Shape{circle1, circle2, rec1, rec2}
for _, shape := range all_shapes_in_array {
    fmt.Printf("%f %f", shape.area(), shape.circumference())
}

And it will work as expected.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks. The problems stemmed from the use of *DataCircle in my code, didn't know * made a difference.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.