WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Go · Intermediate · question 25 of 100

How is the ’interface’ type used in Go, and why is it important?

📕 Buy this interview preparation book: 100 Go questions & answers — PDF + EPUB for $5

Interfaces in Go are a powerful and important language feature, providing a way to specify the behavior of an object. Go interfaces have two components: a set of method signatures and a concrete value that is said to "implement" the interface when it provides definitions for the methods declared in the interface. Interfaces enable a more flexible and composable code, which is critical for writing extensible and maintainable programs.

An interface is declared using the ’interface’ keyword followed by a set of method signatures enclosed in curly braces. For example, let’s define an interface called ‘Shape‘ that has two methods: ‘Area()‘ and ‘Perimeter()‘.

type Shape interface {
    Area() float64
    Perimeter() float64
}

An important aspect of Go interfaces is they are implicitly satisfied, meaning that a type does not have to explicitly declare that it implements an interface. As long as the type has methods with the same signatures as the interface, it is considered to have implemented the interface. Let’s define two concrete types, ‘Rectangle‘ and ‘Circle‘, that implement the ‘Shape‘ interface:

type Rectangle struct {
    Width  float64
    Height float64
}
type Circle struct {
    Radius float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2*(r.Width + r.Height)
}

func (c Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

func (c Circle) Perimeter() float64 {
    return 2 * math.Pi * c.Radius
}

Now that ‘Rectangle‘ and ‘Circle‘ implement the ‘Shape‘ interface, we can use them in a function that takes a ‘Shape‘ parameter, performing operations like calculating the total area of all shapes in a list.

func TotalArea(shapes []Shape) float64 {
    var totalArea float64
    for _, shape := range shapes {
        totalArea += shape.Area()
    }
    return totalArea
}

The ‘TotalArea()‘ function does not need to know whether it’s dealing with rectangles, circles, or any other type of shape that might implement the ‘Shape‘ interface. This abstraction enables writing more flexible and modular code.


Go Interface Type Importance
1. Polymorphism: Interfaces allow writing code that can handle multiple different types, as long as they implement the same methods, promoting code reuse and reducing duplication.

2. Decoupling: Interfaces create a clear separation between the abstract behavior and its concrete implementation, allowing different components of the codebase to evolve independently.

3. Extensibility: By defining behavior in terms of interfaces, it becomes easier to extend the codebase, adding new implementations without changing the code that uses those interfaces.

4. Testability: Interfaces play a crucial role in testing, as they make it easy to swap out concrete components with mock implementations for isolated and controlled tests.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Go interview — then scores it.
📞 Practice Go — free 15 min
📕 Buy this interview preparation book: 100 Go questions & answers — PDF + EPUB for $5

All 100 Go questions · All topics