# [Go](EN) Go language struct and method basic usage

Post about basic usage of struct and method in Go language

## Environment and Prerequisite

• Go(1.15.8)
• Experience with other programming languages

## Struct and Method

### Struct in Go

• Go language supports its own way of OOP. There is no class in Go. Also no class so no inheritance.
• So it use struct and method.
• Briefly write about struct and method in below.

### Struct Example

• There are four ways like below example.
• We can use keyword `new` or we can make constructor function.
``````package main

import (
"fmt"
)

// define struct
type Rectangle struct {
width int
height int
}

// define constructor
func NewRectangle(width int, height int) *Rectangle{
return &Rectangle{width, height}
}

func main() {

// create instances
var rec1 = Rectangle{}
rec1.width = 2
rec1.height = 3

rec2 := Rectangle{4, 5}

var rec3 = new(Rectangle)
rec3.width = 6
rec3.height = 7

var rec4 = NewRectangle(8, 9)

// check instances
fmt.Println(rec1.width, rec1.height)
fmt.Println(rec2.width, rec2.height)
fmt.Println(rec3.width, rec3.height)
fmt.Println(rec4.width, rec4.height)
}
``````
``````2 3
4 5
6 7
8 9
``````

### Method Example

• By using receiver, we can define method for specific class.
• In below example, `(r Rectangle)` and `(r *Rectangle)` are receivers.
``````package main

import (
"fmt"
)

// define struct
type Rectangle struct {
width int
height int
}

// define constructor
func NewRectangle(width int, height int) *Rectangle{
return &Rectangle{width, height}
}

// define methods
func (r Rectangle) area() int{
return r.width * r.height
}

func (r *Rectangle) setWidth(width int){
r.width = width
}

func (r Rectangle) setHeight(height int){
r.height = height
}

func main() {

// create instances
var rec = NewRectangle(8, 9)

// check instances
fmt.Println(rec.width, rec.height)
fmt.Println()

// check methods
fmt.Println(rec.area())
fmt.Println()

rec.setWidth(10)
// rec.height would not be changed because its method's receiver is value receiver
rec.setHeight(10)
fmt.Println(rec.width, rec.height)
}
``````
``````8 9

72

10 9
``````

Updated on