🧰 Go Function Basics – Parameters, Recursion, Closures, Methods & More
🧲 Introduction – Why Functions Matter in Go
Functions in Go are more than just reusable blocks of code—they’re first-class citizens. You can pass them as values, define them anonymously, use closures, and even attach them to structs as methods. Go’s function model is powerful, yet simple.
🎯 In this guide, you’ll learn:
- How to declare and use functions in Go
- Difference between call by value and reference
- Anonymous functions and closures
- Go method functions on structs
- Recursion and the
deferkeyword
📘 Topics Covered
| 🔹 Concept | 📖 Description |
|---|---|
| 🔧 Go Function Basics | Function syntax, parameters, return types |
| 📥 Go Call by Value | Arguments passed by copying the value |
| 📤 Go Call by Reference | Passing pointers for memory-safe modification |
| 🎯 Go Functions as Values | Assigning functions to variables or passing them as arguments |
| 🧑🎤 Go Anonymous Functions | Functions without names, often inline |
| 🔒 Go Function Closures | Functions capturing outer scope variables |
| 🧍 Go Method Functions | Functions associated with struct types |
| 🔁 Go Recursion | Calling a function from itself |
🕗 Go defer Keyword | Postponing a statement until surrounding function returns |
🔧 Go – Function Basics
func add(a int, b int) int {
return a + b
}
func main() {
result := add(2, 3)
fmt.Println("Sum:", result)
}
✅ Multiple returns:
func split(sum int) (int, int) {
return sum / 2, sum % 2
}
📥 Go – Call by Value
func update(val int) {
val = val + 10
}
func main() {
num := 5
update(num)
fmt.Println(num) // 5 (unchanged)
}
🧠 Go passes basic types by value. Original variable is not affected.
📤 Go – Call by Reference (Pointers)
func update(val *int) {
*val = *val + 10
}
func main() {
num := 5
update(&num)
fmt.Println(num) // 15
}
✅ Use pointers (*, &) to modify the original variable.
🎯 Go – Functions as Values
func greet(name string) string {
return "Hello " + name
}
func main() {
f := greet
fmt.Println(f("Gopher"))
}
✅ Functions can be:
- Assigned to variables
- Passed as arguments
- Returned from other functions
🧑🎤 Go – Anonymous Functions
func main() {
sum := func(a int, b int) int {
return a + b
}
fmt.Println(sum(3, 4))
}
✅ Use for short, inline logic—especially useful in goroutines or callbacks.
🔒 Go – Function Closures
func counter() func() int {
count := 0
return func() int {
count++
return count
}
}
func main() {
inc := counter()
fmt.Println(inc()) // 1
fmt.Println(inc()) // 2
}
🧠 Closure remembers the outer variable’s state, even after the outer function exits.
🧍 Go – Method Functions
type User struct {
name string
}
func (u User) greet() string {
return "Hi, " + u.name
}
func main() {
user := User{"Bob"}
fmt.Println(user.greet())
}
✅ func (receiver Type) methodName()
🔁 Use *Type to modify the original struct.
🔁 Go – Recursion
func factorial(n int) int {
if n == 0 {
return 1
}
return n * factorial(n-1)
}
✅ Recursive functions must have a base condition to avoid infinite loops.
🕗 Go – defer Keyword
func main() {
defer fmt.Println("World")
fmt.Println("Hello")
}
✅ Output:
Hello
World
🧠 defer is useful for:
- Closing files
- Unlocking mutexes
- Cleanup logic
📌 Summary – Recap & Next Steps
Go functions are first-class, flexible, and powerful. With support for pointers, closures, and methods, you can structure code that’s modular, memory-safe, and concurrent-ready.
🔍 Key Takeaways:
- Functions can return multiple values
- Use pointers for call-by-reference behavior
- Anonymous functions and closures add flexibility
- Structs can have methods with receivers
deferruns statements just before a function returns
⚙️ Real-World Use Cases:
- Handling resources (files, DB) with
defer - Writing APIs with method-based handlers
- Using closures for maintaining state in goroutines
❓ Frequently Asked Questions
❓ Can Go functions return multiple values?
✅ Yes. Just list them:
func divide(a, b int) (int, int) {
return a / b, a % b
}
❓ Is Go pass-by-reference or value?
✅ Go is pass-by-value, but you can simulate reference via pointers (*).
❓ When should I use defer?
✅ Use defer for cleanup logic like closing files or database connections.
❓ Can I define functions inside other functions in Go?
✅ Yes—anonymous or closure functions can be declared inside functions.
❓ What is the difference between function and method in Go?
✅ Functions stand alone, while methods are functions with a receiver (used with structs).
Share Now :
