Error Handling
Go mein ordinary error handling ke liye koi try/catch aur koi exceptions nahi hain. Iske bajaye, ek function jo fail ho sakta hai woh bas ek error ko ek extra value ke tor par wapas karta hai, aur caller use explicitly check karta hai — error bas ek interface hai jiska ek method hai, Error() string.
package main
import (
"errors"
"fmt"
)
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}Result: 5
err check karna convention se optional nahi hai
if err != nil ek aise call ke foran baad jo ek error wapas karta hai, kisi bhi Go codebase mein sab se aam patterns mein se ek hai. Koi language-level enforcement nahi hai, lekin idiomatic Go code har error ko check karta hai jo use wapas milta hai, wahin jahan woh wapas hoti hai.
package main
import (
"errors"
"fmt"
)
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}Error: cannot divide by zero
Aage: defer, panic, aur recover — Go ka narrow, jaan bujh kar-limited exception-like mechanism.
Practice exercise
Ek function safeDivide(a, b float64) (float64, error) likhein jo ek error "cannot divide by zero" wapas kare agar b 0 ho, warna a/b aur nil. Use (10, 0) ke sath call karein, aur agar koi error ho to use print karein.