Bird
Raised Fist0
Goprogramming~15 mins

Struct pointers in Go - Mini Project: Build & Apply

Choose your learning style10 modes available
Struct pointers
📖 Scenario: You are creating a simple program to manage a book's information using Go structs and pointers. This helps you understand how to work with pointers to structs, which is common in Go programming.
🎯 Goal: Build a Go program that creates a struct for a book, uses a pointer to modify the book's title, and then prints the updated title.
📋 What You'll Learn
Create a struct type called Book with a field Title of type string.
Create a variable myBook of type Book with the title "Go Programming".
Create a pointer variable bookPtr that points to myBook.
Use the pointer bookPtr to change the Title field to "Advanced Go Programming".
Print the updated Title of myBook.
💡 Why This Matters
🌍 Real World
Working with pointers to structs is common in Go programs that manage data efficiently, such as in web servers, databases, or games.
💼 Career
Understanding struct pointers is essential for Go developers to write memory-efficient and clear code, which is highly valued in backend and systems programming jobs.
Progress0 / 4 steps
1
Create the Book struct and a variable
Create a struct type called Book with a field Title of type string. Then create a variable called myBook of type Book with the title set to "Go Programming".
Go
Hint

Use type Book struct { Title string } to define the struct. Then create myBook with Book{Title: "Go Programming"}.

2
Create a pointer to the Book variable
Create a pointer variable called bookPtr that points to the variable myBook.
Go
Hint

Use the & operator to get the address of myBook and assign it to bookPtr.

3
Change the Title using the pointer
Use the pointer variable bookPtr to change the Title field of myBook to "Advanced Go Programming".
Go
Hint

Use bookPtr.Title = "Advanced Go Programming" to update the title through the pointer.

4
Print the updated Title
Print the updated Title field of the variable myBook using fmt.Println.
Go
Hint

Use fmt.Println(myBook.Title) to print the updated title.

Practice

(1/5)
1. What does a struct pointer in Go hold?
type Person struct { Name string }
easy
A. Only the struct's first field value
B. A copy of the struct data
C. The memory address of a struct instance
D. A string representation of the struct

Solution

  1. Step 1: Understand what a pointer stores

    A pointer stores the memory address of a variable, not the variable's value itself.
  2. Step 2: Apply to struct pointers

    A struct pointer holds the address of the struct instance, allowing access or modification of the original struct.
  3. Final Answer:

    The memory address of a struct instance -> Option C
  4. Quick Check:

    Struct pointer = memory address [OK]
Hint: Pointers hold addresses, not copies. Remember & for address [OK]
Common Mistakes:
  • Thinking pointer holds a copy of the struct
  • Confusing pointer with struct value
  • Assuming pointer holds only first field
2. Which of the following is the correct way to declare a pointer to a struct Person in Go?
easy
A. var *p Person
B. var p Person*
C. var p &Person
D. var p *Person

Solution

  1. Step 1: Recall Go pointer syntax

    In Go, a pointer type is declared by placing * before the type name, e.g., *Person.
  2. Step 2: Match correct declaration

    var p *Person uses var p *Person, which is the correct syntax for a pointer variable.
  3. Final Answer:

    var p *Person -> Option D
  4. Quick Check:

    Pointer declaration = *Type [OK]
Hint: Pointer type syntax: *TypeName, not after variable [OK]
Common Mistakes:
  • Placing * after variable name
  • Using & in declaration instead of *
  • Incorrect order of * and type
3. What is the output of this Go program?
package main
import "fmt"
type Point struct { X, Y int }
func main() {
 p := Point{1, 2}
 ptr := &p
 ptr.X = 10
 fmt.Println(p.X)
}
medium
A. 1
B. 10
C. 0
D. Compilation error

Solution

  1. Step 1: Understand pointer modification

    ptr points to p. Changing ptr.X modifies p.X because ptr references p's memory.
  2. Step 2: Check printed value

    After setting ptr.X = 10, p.X becomes 10. So, printing p.X outputs 10.
  3. Final Answer:

    10 -> Option B
  4. Quick Check:

    Pointer changes original struct field [OK]
Hint: Changing pointer field changes original struct field [OK]
Common Mistakes:
  • Thinking ptr.X is separate copy
  • Expecting original p.X to remain 1
  • Confusing pointer dereference syntax
4. Identify the error in this Go code snippet:
package main
import "fmt"
type User struct { Name string }
func updateName(u User) {
 u.Name = "Alice"
}
func main() {
 user := User{"Bob"}
 updateName(&user)
 fmt.Println(user.Name)
}
medium
A. Passing pointer to function expecting value
B. Missing import for fmt package
C. Cannot assign string to Name field
D. Function parameter should be a pointer to User

Solution

  1. Step 1: Check function parameter type

    Function updateName expects a User value, but main passes &user (a *User pointer).
  2. Step 2: Identify the type mismatch

    This causes a compilation error because the argument type (*User) does not match the parameter type (User).
  3. Final Answer:

    Passing pointer to function expecting value -> Option A
  4. Quick Check:

    Function param must match argument type [OK]
Hint: Match function param type with argument (& for pointer) [OK]
Common Mistakes:
  • Passing pointer to value parameter without pointer receiver
  • Ignoring need to modify original struct
  • Assuming string assignment causes error
5. Given this struct and function:
package main
import "fmt"
type Counter struct { Count int }
func increment(c *Counter) {
 c.Count++
}
func main() {
 c := Counter{Count: 5}
 increment(&c)
 increment(c)
 fmt.Println(c.Count)
}

What will happen when running this program?
hard
A. Compilation error at increment(c)
B. Output is 7
C. Output is 6
D. Runtime panic due to invalid pointer

Solution

  1. Step 1: Analyze function calls

    increment expects a *Counter pointer. The first call increment(&c) is correct.
  2. Step 2: Check second call increment(c)

    Passing c (a value) instead of *Counter causes a compilation error because types don't match.
  3. Final Answer:

    Compilation error at increment(c) -> Option A
  4. Quick Check:

    Pointer param requires pointer argument [OK]
Hint: Pointer params need pointer args; value won't auto-convert [OK]
Common Mistakes:
  • Assuming Go auto-converts value to pointer
  • Expecting output 7 without error
  • Ignoring type mismatch in function call
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