Bird
Raised Fist0
Goprogramming~10 mins

Receiver types in Go - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a method with a pointer receiver.

Go
func (p [1]) Greet() string {
    return "Hello, " + p.name
}
Drag options to blanks, or click blank then click option'
Aperson
BPerson
C*Person
D&Person
Attempts:
3 left
💡 Hint
Common Mistakes
Using a value receiver when a pointer receiver is needed.
Forgetting the asterisk (*) in the receiver type.
2fill in blank
medium

Complete the code to call the method with a pointer receiver correctly.

Go
p := Person{name: "Alice"}
result := p.[1]()
Drag options to blanks, or click blank then click option'
AGreet()
B&Greet
C*Greet
DGreet
Attempts:
3 left
💡 Hint
Common Mistakes
Trying to call the method with & or * symbols.
Adding parentheses in the method name inside the call.
3fill in blank
hard

Fix the error in the method receiver declaration.

Go
func ([1] Person) UpdateName(newName string) {
    p.name = newName
}
Drag options to blanks, or click blank then click option'
Ap
B*p
CPerson
D*Person
Attempts:
3 left
💡 Hint
Common Mistakes
Using the type name instead of a variable name as receiver.
Using pointer syntax incorrectly in the receiver variable name.
4fill in blank
hard

Fill both blanks to define a method with a pointer receiver and update the struct field.

Go
func ([1] [2]) UpdateAge(newAge int) {
    p.age = newAge
}
Drag options to blanks, or click blank then click option'
Ap
BPerson
C*Person
Dage
Attempts:
3 left
💡 Hint
Common Mistakes
Using a value receiver when a pointer receiver is needed to modify fields.
Using the struct name as the receiver variable.
5fill in blank
hard

Fill all three blanks to create a method with a value receiver that returns the person's name in uppercase.

Go
func ([1] [2]) NameUpper() string {
    return strings.[3](p.name)
}
Drag options to blanks, or click blank then click option'
Ap
BPerson
CToUpper
DToLower
Attempts:
3 left
💡 Hint
Common Mistakes
Using pointer receiver when value receiver is intended.
Using ToLower instead of ToUpper.
Incorrect receiver variable name.

Practice

(1/5)
1. What is the main difference between a value receiver and a pointer receiver in Go methods?
easy
A. Value receivers are faster than pointer receivers in all cases.
B. Value receivers can only read data; pointer receivers can only write data.
C. Pointer receivers create a new copy of the data each time.
D. Value receivers get a copy of the data; pointer receivers get the original data to modify.

Solution

  1. Step 1: Understand receiver types

    Value receivers receive a copy of the original data, so changes inside the method do not affect the original.
  2. Step 2: Pointer receivers behavior

    Pointer receivers receive the address of the original data, allowing methods to modify the original value.
  3. Final Answer:

    Value receivers get a copy of the data; pointer receivers get the original data to modify. -> Option D
  4. Quick Check:

    Receiver type = copy vs original [OK]
Hint: Pointer receivers allow modifying original data, value receivers do not [OK]
Common Mistakes:
  • Thinking value receivers modify original data
  • Believing pointer receivers create copies
  • Assuming pointer receivers are always slower
2. Which of the following is the correct syntax to define a method with a pointer receiver for a struct Person?
easy
A. func (p Person) Greet() string { return "Hi" }
B. func (p *Person) Greet() string { return "Hi" }
C. func Greet(p *Person) string { return "Hi" }
D. func (p Person*) Greet() string { return "Hi" }

Solution

  1. Step 1: Identify pointer receiver syntax

    Pointer receivers use an asterisk before the type in the receiver: (p *Person).
  2. Step 2: Check method declaration format

    The method must be declared with receiver in parentheses before the method name.
  3. Final Answer:

    func (p *Person) Greet() string { return "Hi" } -> Option B
  4. Quick Check:

    Pointer receiver syntax = (p *Type) [OK]
Hint: Pointer receiver syntax uses * before type inside parentheses [OK]
Common Mistakes:
  • Missing parentheses around receiver
  • Placing * after variable name instead of type
  • Defining method without receiver
3. What will be the output of this Go program?
package main
import "fmt"
type Counter struct { count int }
func (c Counter) Increment() { c.count++ }
func (c *Counter) IncrementPtr() { c.count++ }
func main() {
  c := Counter{count: 5}
  c.Increment()
  fmt.Println(c.count)
  c.IncrementPtr()
  fmt.Println(c.count)
}
medium
A. 5 6
B. 5 5
C. 6 6
D. 6 7

Solution

  1. Step 1: Analyze Increment method with value receiver

    Increment uses a value receiver, so it works on a copy. The original count remains 5 after calling Increment.
  2. Step 2: Analyze IncrementPtr method with pointer receiver

    IncrementPtr uses a pointer receiver, so it modifies the original count from 5 to 6.
  3. Final Answer:

    5 6 -> Option A
  4. Quick Check:

    Value receiver no change, pointer receiver changes [OK]
Hint: Value receiver copies data; pointer receiver changes original [OK]
Common Mistakes:
  • Assuming value receiver changes original
  • Confusing method calls with pointer vs value receivers
  • Expecting both increments to change count
4. Identify the error in this Go code snippet:
type Rectangle struct { width, height int }
func (r Rectangle) Scale(factor int) {
  r.width = r.width * factor
  r.height = r.height * factor
}
func main() {
  rect := Rectangle{2, 3}
  rect.Scale(2)
  fmt.Println(rect.width, rect.height)
}
medium
A. The struct fields width and height must be pointers.
B. Scale method must return a new Rectangle instead of modifying fields.
C. Scale method should have a pointer receiver to modify Rectangle fields.
D. The Scale method should be defined outside the Rectangle type.

Solution

  1. Step 1: Check receiver type in Scale method

    Scale uses a value receiver, so it works on a copy and does not modify the original Rectangle.
  2. Step 2: Fix receiver to pointer to modify original

    Changing receiver to pointer (r *Rectangle) allows Scale to modify the original struct fields.
  3. Final Answer:

    Scale method should have a pointer receiver to modify Rectangle fields. -> Option C
  4. Quick Check:

    Modify struct fields = pointer receiver needed [OK]
Hint: Use pointer receiver to change struct fields inside methods [OK]
Common Mistakes:
  • Using value receiver expecting changes to persist
  • Trying to make struct fields pointers unnecessarily
  • Thinking methods must be outside struct
5. You want to create a Go method Reset for a struct Timer that sets its seconds field to zero. Which receiver type should you use and why?
hard
A. Use a pointer receiver because you need to modify the original Timer's seconds field.
B. Use a value receiver because it is simpler and does not modify the original.
C. Use a value receiver and return a new Timer with seconds zeroed.
D. Use a pointer receiver but do not modify any fields inside the method.

Solution

  1. Step 1: Understand the goal of Reset method

    Reset must change the Timer's seconds field to zero, modifying the original struct.
  2. Step 2: Choose receiver type to allow modification

    Pointer receiver is needed to modify the original Timer instance inside the method.
  3. Final Answer:

    Use a pointer receiver because you need to modify the original Timer's seconds field. -> Option A
  4. Quick Check:

    Modify original struct = pointer receiver [OK]
Hint: Modify original struct? Use pointer receiver [OK]
Common Mistakes:
  • Using value receiver expecting original to change
  • Returning new struct instead of modifying original
  • Using pointer receiver but not modifying fields
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard