AnyCompiler

Pointers

Ek pointer ek value ka memory address hold karta hai. & ek variable ka address leta hai, aur * ek pointer ko dereference karta hai us value ko get (ya set) karne ke liye jispar woh point karta hai. Rust ke bar-aks, Go mein koi ownership ya borrowing rules satisfy karne ki zaroorat nahi — pointers bas ek value ko share aur mutate karne ka direct tareeqa hain.

package main

import "fmt"

func main() {
	count := 10
	pointer := &count

	fmt.Println(*pointer)
	*pointer = 20
	fmt.Println(count)
}
Output
10
20

Ek function mein pointer pass karna

Go default tor par arguments ko by value pass karta hai — ek function ko normally apni khud ki copy milti hai. Iske bajaye ek pointer pass karna ek function ko caller ka actual variable modify karne deta hai, jo isi wajah se hai ke neeche double, main mein value ko badal deta hai jabke value khud kabhi wahan reassign nahi hua.

package main

import "fmt"

func double(n *int) {
	*n = *n * 2
}

func main() {
	value := 21
	double(&value)
	fmt.Println(value)
}
Output
42

Aage: error handling — Go ka explicit if err != nil pattern, exceptions ke bajaye.

Practice exercise

Ek function increment(n *int) likhein jo n jispar point karta hai us value mein 1 add kare. Use ek variable count := 5 ke pointer ke sath call karein, phir count print karein.