Use case of Interface in GoLang

  • date 1st May, 2021 |
  • by Prwatech |
  • 0 Comments

Best Practices for Interfaces in Go

 

In Go, interfaces play a crucial role in defining behavior and promoting flexibility in code design. Interfaces enable polymorphism by allowing different types to satisfy the same interface contract, facilitating code reuse and decoupling implementations from specific types.

To adhere to best practices when using interfaces in Go:

  1. Keep Interfaces Small and Focused: Define interfaces with a small number of methods that capture a specific behavior or capability. This promotes clarity and makes interfaces easier to implement.

  2. Use Interfaces Sparingly: Favor concrete types over interfaces unless there is a clear benefit to using an interface. Overusing interfaces can lead to unnecessary abstraction and increased complexity.

  3. Name Interfaces Descriptively: Use meaningful and descriptive names for interfaces that reflect their purpose and functionality. This enhances code readability and comprehension.

Interface is a protocol – a contract. It only describes the expect behavior, It is an abstract type.

Use Case 1:

Program to print value through interface.

package main

import “fmt”

funcmyfunc(a interface{}) {

            v := a.(string)

            fmt.Println(“value :”, v)

}

funcmain() {

            var v interface {

            } = “Prwatech”

            myfunc(v)

}

Output :

Use Case 2:

Program for geometric shapes.

package main

import (

    “fmt”

    “math”

)

type geometry interface {

area() float64

perim() float64

}

type rect struct {

    width, height float64

}

type circle struct {

    radius float64

}

func (r rect) area() float64 {

    return r.width * r.height

}

func (r rect) perim() float64 {

    return 2*r.width + 2*r.height

}

func (c circle) area() float64 {

    return math.Pi * c.radius * c.radius

}

func (c circle) perim() float64 {

    return 2 * math.Pi * c.radius

}

funcmeasure(g geometry) {

fmt.Println(g)

fmt.Println(g.area())

fmt.Println(g.perim())

}

funcmain() {

r := rect{width: 3, height: 4}

c := circle{radius: 5}

    measure(r)

    measure(c)

}

Output:

Use Case 3:

package main

import (

    “fmt”

)

funcmyFunc(a interface{}) {

fmt.Println(a)

}

funcmain() {

    var my_age int

my_age = 25

myFunc(my_age)

}

Output :

0
0

Quick Support

image image