Bird
Raised Fist0
Goprogramming~3 mins

Creating struct values in Go - Why You Should Know This

Choose your learning style10 modes available
The Big Idea

What if you could keep all your data neat and tidy like a labeled box instead of scattered papers everywhere?

The Scenario

Imagine you want to keep track of your friends' information like their name, age, and city. Without structs, you'd have to manage separate variables for each detail, which quickly becomes messy and confusing.

The Problem

Using separate variables or multiple maps for each piece of information is slow and error-prone. You might mix up names and ages or forget which variable holds what. It's like trying to organize a group photo by remembering everyone's position instead of having a labeled list.

The Solution

Creating struct values lets you bundle related information together in one place. It's like having a neat folder for each friend with all their details inside. This makes your code cleaner, easier to read, and less likely to have mistakes.

Before vs After
✗ Before
var name string = "Alice"
var age int = 30
var city string = "New York"
✓ After
type Friend struct {
  Name string
  Age int
  City string
}

alice := Friend{Name: "Alice", Age: 30, City: "New York"}
What It Enables

It enables you to organize complex data clearly and work with groups of related information easily and safely.

Real Life Example

Think of a contact list app where each contact has a name, phone number, and email. Using structs, you can create a contact record for each person, making it simple to add, update, or find contacts.

Key Takeaways

Structs group related data into one unit.

This reduces mistakes and makes code easier to understand.

It helps manage complex information like real-world objects.

Practice

(1/5)
1. What is the correct way to create a struct value with fields Name as "Alice" and Age as 30 in Go?
easy
A. person := Person("Alice", 30)
B. person := Person{30, "Alice"}
C. person := Person{Name: "Alice", Age: 30}
D. person := Person{Name = "Alice", Age = 30}

Solution

  1. Step 1: Understand struct literal syntax

    In Go, struct values are created using the syntax StructType{FieldName: value, ...} for clarity and correctness.
  2. Step 2: Match the syntax with the given options

    person := Person{Name: "Alice", Age: 30} uses the correct syntax with field names and values. Options A and C use positional values without field names, which is allowed but less clear and can cause errors if order changes. person := Person{Name = "Alice", Age = 30} uses '=' which is invalid in struct literals.
  3. Final Answer:

    person := Person{Name: "Alice", Age: 30} -> Option C
  4. Quick Check:

    Use field names with colons in struct literals = B [OK]
Hint: Use field names with colons to create structs clearly [OK]
Common Mistakes:
  • Using parentheses instead of braces
  • Using '=' instead of ':' in struct literals
  • Mixing field order without names causing confusion
2. Which of the following is the correct syntax to create a struct value with zero values for all fields in Go?
easy
A. p := Person{}
B. p := Person()
C. p := new(Person)
D. p := Person(nil)

Solution

  1. Step 1: Recall zero value struct creation

    In Go, creating a struct with zero values for all fields is done by using empty braces after the struct type: StructType{}.
  2. Step 2: Evaluate options

    p := Person{} uses Person{} which creates a struct with zero values. p := Person() uses parentheses which is invalid syntax. p := new(Person) uses new(Person) which returns a pointer, not a struct value. p := Person(nil) uses nil which is invalid for struct values.
  3. Final Answer:

    p := Person{} -> Option A
  4. Quick Check:

    Empty braces create zero-value struct = C [OK]
Hint: Use empty braces {} to create zero-value struct [OK]
Common Mistakes:
  • Using parentheses instead of braces
  • Confusing new() pointer with struct value
  • Passing nil to struct literal
3. Given the struct and code below, what will be printed?
type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{Name: "Bob", Age: 25}
    p.Age = 26
    fmt.Println(p)
}
medium
A. {Bob 25}
B. {Bob 26}
C. Person{Name: "Bob", Age: 26}
D. Syntax error

Solution

  1. Step 1: Create struct and modify field

    The struct Person is created with Name "Bob" and Age 25. Then the Age field is updated to 26.
  2. Step 2: Print the struct value

    Printing the struct with fmt.Println shows the field values in braces. Since Age was updated to 26, the output is {Bob 26}.
  3. Final Answer:

    {Bob 26} -> Option B
  4. Quick Check:

    Updated field value shows in output = D [OK]
Hint: Changing a field after creation updates printed struct [OK]
Common Mistakes:
  • Assuming original Age remains unchanged
  • Expecting struct type name in print output
  • Confusing syntax error with valid code
4. What is wrong with the following code snippet?
type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{Name: "Eve", Age: "30"}
    fmt.Println(p)
}
medium
A. Age field has wrong type value
B. Missing parentheses in struct creation
C. Name field is not initialized
D. fmt.Println cannot print structs

Solution

  1. Step 1: Check field types in struct literal

    The struct Person has Age as int type, but the code assigns "30" which is a string, causing a type mismatch error.
  2. Step 2: Identify the error cause

    Assigning a string to an int field is invalid in Go and causes a compile-time error.
  3. Final Answer:

    Age field has wrong type value -> Option A
  4. Quick Check:

    Field types must match exactly = A [OK]
Hint: Match field types exactly when creating struct values [OK]
Common Mistakes:
  • Assigning string to int field
  • Confusing struct literal syntax errors
  • Thinking fmt.Println can't print structs
5. How can you create a slice of struct values representing three people with names "Anna", "Ben", "Cara" and ages 22, 28, 31 respectively in Go?
hard
A. people := []Person{Person("Anna", 22), Person("Ben", 28), Person("Cara", 31)}
B. people := [Person]{Name: "Anna", Age: 22, Name: "Ben", Age: 28, Name: "Cara", Age: 31}
C. people := []Person{Name: "Anna", Age: 22, Name: "Ben", Age: 28, Name: "Cara", Age: 31}
D. people := []Person{{Name: "Anna", Age: 22}, {Name: "Ben", Age: 28}, {Name: "Cara", Age: 31}}

Solution

  1. Step 1: Understand slice of structs syntax

    A slice of structs is created using []StructType{...} with each element as a struct literal.
  2. Step 2: Check each option for correct syntax

    people := []Person{{Name: "Anna", Age: 22}, {Name: "Ben", Age: 28}, {Name: "Cara", Age: 31}} correctly creates a slice with three struct literals using field names. people := [Person]{Name: "Anna", Age: 22, Name: "Ben", Age: 28, Name: "Cara", Age: 31} uses array syntax but incorrect literal format. people := []Person{Name: "Anna", Age: 22, Name: "Ben", Age: 28, Name: "Cara", Age: 31} tries to create slice but misses braces for each struct. people := []Person{Person("Anna", 22), Person("Ben", 28), Person("Cara", 31)} uses parentheses which is invalid for struct literals.
  3. Final Answer:

    people := []Person{{Name: "Anna", Age: 22}, {Name: "Ben", Age: 28}, {Name: "Cara", Age: 31}} -> Option D
  4. Quick Check:

    Slice of structs uses []Type{{...}, {...}} = A [OK]
Hint: Use double braces for slice of struct literals [OK]
Common Mistakes:
  • Using parentheses instead of braces for structs
  • Missing braces around each struct in slice
  • Confusing array and slice syntax
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