📖 Scenario: Imagine you have a simple program that manages a person's age. You want to understand how changing the age inside a function affects the original age variable. This will help you learn the difference between passing values and passing pointers in Go.
🎯 Goal: You will create a program that shows how passing a value to a function does not change the original variable, but passing a pointer to a function allows you to change the original variable.
📋 What You'll Learn
Create a variable age with the value 30
Create a function increaseAgeValue that takes an int parameter and increases it by 1
Create a function increaseAgePointer that takes a pointer to an int and increases the value it points to by 1
Call both functions with the age variable and observe the difference
Print the value of age after each function call
💡 Why This Matters
🌍 Real World
Understanding passing by value and by pointer helps when writing programs that manage data efficiently, like updating user profiles or handling large data structures.
💼 Career
Many Go programming jobs require knowledge of pointers to write efficient and correct code, especially in system programming, backend services, and performance-critical applications.
Progress0 / 4 steps
1
Create the initial variable
Create a variable called age and set it to 30.
Go
Hint
Use age := 30 to create the variable.
2
Create the functions to increase age
Create two functions: increaseAgeValue that takes an int parameter called a and increases it by 1, and increaseAgePointer that takes a pointer to an int called a and increases the value it points to by 1.
Go
Hint
Remember, to change the original variable, use a pointer parameter and dereference it with *.
3
Call the functions with the variable
Inside main, call increaseAgeValue with age, then call increaseAgePointer with the address of age using &age.
Go
Hint
Call increaseAgeValue(age) and increaseAgePointer(&age) inside main.
4
Print the value of age after each function call
Add fmt.Println(age) after calling increaseAgeValue(age) and again after calling increaseAgePointer(&age) to show how the value changes.
Go
Hint
Use fmt.Println(age) after each function call to see the difference.
Practice
(1/5)
1. What happens when you pass a variable to a function by value in Go?
easy
A. The function receives a copy; changes inside do not affect the original variable.
B. The function receives the original variable; changes inside affect the original.
C. The function cannot modify the variable at all.
D. The function receives a reference but cannot change the original variable.
Solution
Step 1: Understand passing by value
Passing by value means the function gets a copy of the variable, not the original.
Step 2: Effect of changes inside the function
Changes to the copy do not affect the original variable outside the function.
Final Answer:
The function receives a copy; changes inside do not affect the original variable. -> Option A
Quick Check:
Passing by value = copy, no original change [OK]
Hint: Passing by value means function works on a copy [OK]
Common Mistakes:
Thinking changes inside function affect original variable
Confusing pointers with values
Assuming function cannot modify any data
2. Which of the following is the correct way to declare a function parameter as a pointer in Go?
easy
A. func updateValue(val *int) {}
B. func updateValue(&val int) {}
C. func updateValue(val int) {}
D. func updateValue(*val int) {}
Solution
Step 1: Recall pointer syntax in Go function parameters
In Go, a pointer parameter is declared by placing * before the type, e.g., *int.
Step 2: Identify correct syntax
func updateValue(val *int) {} is correct syntax, with * before the type. func updateValue(val int) {} declares a value parameter. func updateValue(&val int) {} and func updateValue(*val int) {} have invalid syntax.
Final Answer:
func updateValue(val *int) {} -> Option A
Quick Check:
Pointer parameter syntax = *type [OK]
Hint: Pointer parameter uses * before type, not variable name [OK]
Common Mistakes:
Putting * before variable name instead of type
Using & in parameter declaration
Confusing pointer syntax with value parameter
3. What is the output of this Go program?
package main
import "fmt"
func changeValue(val int) {
val = 10
}
func main() {
x := 5
changeValue(x)
fmt.Println(x)
}
medium
A. 10
B. 5
C. 0
D. Compilation error
Solution
Step 1: Analyze function parameter passing
The function changeValue receives x by value, so val is a copy of x.
Step 2: Check if original variable changes
Inside changeValue, val is set to 10, but this does not affect x in main.
Final Answer:
5 -> Option B
Quick Check:
Passing by value means original x stays 5 [OK]
Hint: Passing by value means original variable unchanged [OK]
Common Mistakes:
Assuming x changes to 10 after function call
Confusing pointer and value passing
Expecting compilation error due to assignment
4. Identify the error in this Go code snippet:
func increment(num *int) {
num = num + 1
}
func main() {
x := 5
increment(&x)
fmt.Println(x)
}
medium
A. Missing & operator when calling increment.
B. x is not initialized before use.
C. Function parameter should not be a pointer.
D. Cannot add 1 to a pointer directly; need to dereference first.
Solution
Step 1: Understand pointer arithmetic in Go
Go does not support arithmetic on pointers like 'num + 1'. You must dereference the pointer to change the value.
Step 2: Correct way to increment value pointed by pointer
Use '*num = *num + 1' to increment the value at the pointer address.
Final Answer:
Cannot add 1 to a pointer directly; need to dereference first. -> Option D
Quick Check:
Pointer arithmetic invalid; dereference to modify [OK]
Hint: Use * to access pointer value before arithmetic [OK]
Common Mistakes:
Trying to add directly to pointer variable
Forgetting to dereference pointer
Confusing pointer and value types
5. You want to write a function in Go that doubles the value of an integer variable passed to it. Which approach correctly modifies the original variable?
hard
A. Return the doubled value and assign it outside the function.
B. Pass the integer by value and assign double inside the function.
C. Pass a pointer to the integer and modify the value via dereferencing.
D. Use a global variable instead of passing parameters.
Solution
Step 1: Understand how to modify original variable
Passing by value copies the variable, so changes inside function won't affect original.
Step 2: Use pointer to modify original variable
Passing a pointer allows the function to access and change the original variable's value via dereferencing.
Step 3: Consider alternatives
Returning doubled value requires assignment outside; using global variables is bad practice.
Final Answer:
Pass a pointer to the integer and modify the value via dereferencing. -> Option C
Quick Check:
Pointer passing modifies original variable [OK]
Hint: Use pointer to change original variable inside function [OK]
Common Mistakes:
Assuming passing by value changes original variable
Relying on return value without assignment
Using global variables unnecessarily
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.