What if you could organize your data like neat folders instead of messy piles of paper?
Why Struct usage patterns in Go? - Purpose & Use Cases
Imagine you want to keep track of many details about your friends, like their name, age, and favorite color. Without a structured way, you might write separate variables for each detail and each friend, which quickly becomes messy and confusing.
Writing separate variables for each piece of information is slow and easy to mix up. If you want to add more friends or details, you have to create even more variables and remember which belongs to whom. This makes your code hard to read and full of mistakes.
Structs let you group related information together in one place, like a neat folder for each friend. This makes your code cleaner, easier to understand, and simpler to expand when you want to add more details or friends.
var name1 string = "Alice" var age1 int = 30 var color1 string = "Blue" var name2 string = "Bob" var age2 int = 25 var color2 string = "Green"
type Friend struct {
Name string
Age int
Color string
}
friend1 := Friend{Name: "Alice", Age: 30, Color: "Blue"}
friend2 := Friend{Name: "Bob", Age: 25, Color: "Green"}Struct usage patterns let you organize complex data clearly, making your programs easier to build, read, and maintain.
Think of a contact list app where each contact has a name, phone number, and email. Using structs, you can store all this info together for each contact, making it simple to add, update, or find contacts.
Structs group related data into one unit.
This reduces errors and makes code cleaner.
It helps manage complex information easily.
Practice
struct in Go?Solution
Step 1: Understand the role of structs
Structs are used to group related data together in one unit with named fields.Step 2: Compare with other options
Arithmetic, loops, and error handling are not the main purposes of structs.Final Answer:
To group related data with named fields -> Option AQuick Check:
Structs = Group related data [OK]
- Thinking structs are for control flow
- Confusing structs with functions
- Assuming structs handle errors
Person with fields Name (string) and Age (int)?Solution
Step 1: Recall Go struct declaration syntax
In Go, a struct type is declared with the keywordtype, followed by the name, thenstructand fields inside braces.Step 2: Check each option
type Person struct { Name string; Age int } matches the correct syntax. struct Person { Name string; Age int } missestype. Person := struct { Name string; Age int } uses := which is for variables, not type declaration. var Person struct Name string; Age int is invalid syntax.Final Answer:
type Person struct { Name string; Age int } -> Option DQuick Check:
Struct declaration uses 'type Name struct { fields }' [OK]
- Omitting 'type' keyword
- Using := for type declaration
- Incorrect field syntax
type Point struct {
X int
Y int
}
func main() {
p := Point{X: 3, Y: 4}
p.X = 10
fmt.Println(p.X, p.Y)
}Solution
Step 1: Understand struct initialization and modification
The struct Point is initialized with X=3 and Y=4. Then p.X is changed to 10.Step 2: Determine printed values
After modification, p.X is 10 and p.Y remains 4. So printing p.X and p.Y outputs '10 4'.Final Answer:
10 4 -> Option AQuick Check:
Modified field prints updated value [OK]
- Assuming original values stay after assignment
- Confusing field names
- Forgetting to import fmt (not shown here)
type Car struct {
Brand string
Year int
}
func main() {
c := Car{Brand: "Toyota", Year: "2020"}
fmt.Println(c)
}Solution
Step 1: Check field types in struct literal
The struct Car has Year as int, but the code assigns "2020" (a string) to Year.Step 2: Verify other options
Semicolons are optional in Go. Struct name capitalization is fine. fmt.Println can print structs.Final Answer:
Year field assigned a string instead of int -> Option BQuick Check:
Field types must match assigned values [OK]
- Assigning wrong data types to fields
- Thinking semicolons are mandatory
- Assuming fmt.Println can't print structs
Employee with fields Name (string), Salary (int), and Active (bool), which code snippet correctly creates a slice of active employees with salary over 50000 from a given slice emps?Solution
Step 1: Understand filtering conditions
We want employees who are active AND have salary greater than 50000.Step 2: Analyze each option's condition
var filtered []Employee for _, e := range emps { if e.Active && e.Salary > 50000 { filtered = append(filtered, e) } } uses correct AND condition. filtered := []Employee{} for i := 0; i < len(emps); i++ { if emps[i].Salary > 50000 { filtered = append(filtered, emps[i]) } } misses Active check. filtered := make([]Employee, 0) for _, e := range emps { if e.Active || e.Salary > 50000 { filtered = append(filtered, e) } } uses OR instead of AND. filtered := []Employee{} for _, e := range emps { if e.Active && e.Salary < 50000 { filtered = append(filtered, e) } } uses salary less than 50000, which is wrong.Final Answer:
var filtered []Employee for _, e := range emps { if e.Active && e.Salary > 50000 { filtered = append(filtered, e) } } -> Option CQuick Check:
Use AND (&&) for combined conditions [OK]
- Using || instead of && for filtering
- Ignoring one of the filter conditions
- Filtering with wrong comparison operators
Ready to prove it?
Pass the test and this pattern moves unknown
