What if your function could change your data instantly, without messy copying or confusion?
Why Pointer behavior in functions in Go? - Purpose & Use Cases
Imagine you want to change a value inside a function and see that change outside the function too, like updating a shared shopping list. But if you just pass the value, the function only changes its own copy, not the original list.
Manually copying values means every change stays local inside the function. You have to return the new value and remember to assign it back, which is slow and easy to forget. This leads to bugs where your program doesn't update data as expected.
Using pointers lets you give the function the address of the original data. The function can then directly change the original value, like handing over the actual shopping list instead of a copy. This makes updates clear, fast, and reliable.
func updateValue(val int) {
val = 10
}
func main() {
x := 5
updateValue(x)
// x is still 5
}func updateValue(val *int) {
*val = 10
}
func main() {
x := 5
updateValue(&x)
// x is now 10
}It enables functions to directly modify original data, making your programs more efficient and easier to manage.
Think of a function that updates a user's score in a game. Using pointers, the function can change the actual score stored in memory, so the updated score is immediately available everywhere.
Passing values copies data, so changes inside functions don't affect originals.
Pointers let functions access and modify original data directly.
This avoids extra copying and keeps data consistent across your program.
Practice
Solution
Step 1: Understand pointer passing
Passing a pointer sends the address of the variable, not a copy.Step 2: Effect on original variable
Inside the function, using the pointer lets you change the original variable's value.Final Answer:
Modify the original variable's value inside the function -> Option CQuick Check:
Pointer lets function change original variable [OK]
- Thinking pointers create copies instead of referencing original
- Confusing pointer with value passing
- Assuming pointers prevent modification
Solution
Step 1: Recall pointer syntax in function parameters
In Go, a pointer parameter is declared with * before the type, like *int.Step 2: Check each option
func updateValue(val *int) {} correctly uses *int as the parameter type.Final Answer:
func updateValue(val *int) {} -> Option AQuick Check:
Pointer parameter syntax = *type [OK]
- Placing * before variable name instead of type
- Using & in parameter declaration
- Omitting * for pointer type
package main
import "fmt"
func change(val *int) {
*val = 10
}
func main() {
x := 5
change(&x)
fmt.Println(x)
}Solution
Step 1: Understand pointer usage in change function
The function receives a pointer to x and sets the value at that address to 10.Step 2: Trace main function execution
x starts as 5, change(&x) updates x to 10, then fmt.Println prints x.Final Answer:
10 -> Option BQuick Check:
Pointer lets function update x to 10 [OK]
- Expecting original value 5 to print
- Confusing pointer dereference syntax
- Thinking function works without & operator
func update(val *int) {
val = 20
}
func main() {
x := 5
update(&x)
fmt.Println(x)
}Solution
Step 1: Analyze assignment inside update function
val is a pointer to int, but val = 20 tries to assign int to pointer variable, which is invalid.Step 2: Correct way to change value via pointer
Use *val = 20 to assign 20 to the value pointed by val.Final Answer:
Cannot assign int to pointer variable directly -> Option AQuick Check:
Assign to *val, not val [OK]
- Assigning value directly to pointer variable
- Forgetting to dereference pointer
- Confusing pointer and value types
package main
import "fmt"
func swap(a, b *int) {
*a, *b = *b, *a
}
func main() {
x, y := 1, 2
swap(&x, &y)
fmt.Println(x, y)
}Solution
Step 1: Understand swap function behavior
swap takes pointers to two ints and swaps their values using pointer dereferencing.Step 2: Trace main function execution
x=1, y=2 initially; swap(&x, &y) swaps values, so x becomes 2 and y becomes 1.Final Answer:
2 1 -> Option DQuick Check:
Pointer swap exchanges values correctly [OK]
- Expecting original order after swap
- Confusing pointer addresses with values
- Not using * to dereference pointers
Ready to prove it?
Pass the test and this pattern moves unknown
