Understanding Object Oriented Programming in Golang

Implementation of OOP in Go is different from how you would do it in other programming languages. OOP concepts are implemented using structs, interfaces and custom types.

banner

Prerequisites

  • Go local installation (v1.18)
  • A code editor
  • Basic understanding of Go

Introduction

Object oriented programming (OOP) is a paradigm which uses the idea of representing real life obejects OR entities in code. While this paradigm is in use, code is arranged based on functionality; thereby enabling abstraction, re-usability, efficiency and faster maintenance by the engineers.

In, OOP there are three basic but very important concepts that you have to understand viz Classes, Methods and Objects.

  • A class is a user defined data type that acts as a blueprint for objects, attributes and methods.
  • An object is an instance of a class.
  • A method are functions defined in a class to describe the behaviour of objects created from a class.

However, implementation of OOP in Go is different from how you’d do it in other programming languages. OOP concepts are implemented using structs, interfaces and custom types.

What’s a struct?

A struct can be defined as the blue print of an object. They are user-defined collections of fields. This implies that multiple objects can be derived from a shared struct.

In other programming languages, structs are equivalents of classes.

For example;

    ```go

    // Creates a person struct
    type  Person struct {
        name string
        age uint32
        height float32
    }
    ```

Creating objects using structs

In OOP, an object is created from a class (a struct in Go). If we want to created multiple objects from a single class, we’d do it as below:

```go
// Instantiates the Person struct to create the user1 and user2 objects
user1 := Person {
name: "John Doe",
age: 32,
height: 160
}

user2 := Person {
name: "Jabe Doe",
age: 42,
height: 120
}
```

The values of an instantiated struct can be accessed using the dot notation. If we wanted to access the age of the user, we’d do it as below:

```go
fmt.Println("Value:", user1.age)

//Output Value: 32
```

Methods

In OOP, a struct can contain methods that are specific to it, thus they can be used only on the specific struct type. Methods are assigned to a struct by specifying the receiver name and the struct type name before the function name. For example, to add a method to the Person struct type above,

```go

func (person Person) printAge () {
//Code
}

// person is the receiver name
// Person is the struct
// printAge is the function name
```

Interfaces

An interface is a set of methods that we use to define a set of actions.

For example,

1
2
3
4
5
type Person interface{

Walk( direction string )
Sleep()
}