AnyCompiler

Methods

Ek method ek function hai jiska ek receiver hota hai — function name se pehle ek extra parameter jo use ek specific type se jorta hai. func (r Rectangle) Area() ek regular function jaisa parhta hai, lekin r.Area() ko directly kisi bhi Rectangle value par call kiya ja sakta hai.

package main

import "fmt"

type Rectangle struct {
	Width, Height float64
}

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

func main() {
	rect := Rectangle{Width: 10, Height: 5}
	fmt.Println("Area:", rect.Area())
}
Output
Area: 50

Mutation ke liye pointer receivers

Upar wala value receiver, struct ki ek copy leta hai — method ke andar changes original ko affect nahi karte. Ek pointer receiver, func (c *Counter), iske bajaye actual original value par operate karta hai, jo isi wajah se hai ke ek method waqai apne receiver ki state modify kar sakta hai.

package main

import "fmt"

type Counter struct {
	Value int
}

func (c *Counter) Increment() {
	c.Value++
}

func main() {
	counter := Counter{Value: 0}
	counter.Increment()
	counter.Increment()
	fmt.Println(counter.Value)
}
Output
2

Aage: interfaces — Go ka implicit, duck-typed tareeqa shared behavior describe karne ka.

Practice exercise

Ek struct Circle define karein jiska field Radius float64 ho. Ek method Area() float64 add karein jo 3.14159 * c.Radius * c.Radius wapas kare. Radius 2 wala ek Circle banayein, phir circle.Area() print karein.