📖 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
Step 1: Understand what a pointer stores
A pointer stores the memory address of a variable, not the variable's value itself.
Step 2: Apply to struct pointers
A struct pointer holds the address of the struct instance, allowing access or modification of the original struct.
Final Answer:
The memory address of a struct instance -> Option C
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
Step 1: Recall Go pointer syntax
In Go, a pointer type is declared by placing * before the type name, e.g., *Person.
Step 2: Match correct declaration
var p *Person uses var p *Person, which is the correct syntax for a pointer variable.
Final Answer:
var p *Person -> Option D
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
Step 1: Understand pointer modification
ptr points to p. Changing ptr.X modifies p.X because ptr references p's memory.
Step 2: Check printed value
After setting ptr.X = 10, p.X becomes 10. So, printing p.X outputs 10.
Final Answer:
10 -> Option B
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
Step 1: Check function parameter type
Function updateName expects a User value, but main passes &user (a *User pointer).
Step 2: Identify the type mismatch
This causes a compilation error because the argument type (*User) does not match the parameter type (User).
Final Answer:
Passing pointer to function expecting value -> Option A
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
Step 1: Analyze function calls
increment expects a *Counter pointer. The first call increment(&c) is correct.
Step 2: Check second call increment(c)
Passing c (a value) instead of *Counter causes a compilation error because types don't match.
Final Answer:
Compilation error at increment(c) -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.