Bird
Raised Fist0
Goprogramming~10 mins

Creating struct values in Go - Visual Walkthrough

Choose your learning style10 modes available
Concept Flow - Creating struct values
Define struct type
↓
Create struct value
↓
Assign values to fields
↓
Use struct value in code
↓
End
This flow shows how to define a struct type, create a struct value, assign values to its fields, and then use it.
Execution Sample
Go
package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{Name: "Alice", Age: 30}
    fmt.Println(p)
}
This code defines a struct Person, creates a value with Name and Age, and prints it.
Execution Table
StepActionEvaluationResult
1Define struct type PersonPerson struct with fields Name(string), Age(int)Type Person created
2Create struct value p with Name="Alice", Age=30Person{Name: "Alice", Age: 30}p holds {Name: "Alice", Age: 30}
3Print struct value pfmt.Println(p){Alice 30} printed to console
4End of execution-Program ends
💡 All steps completed, struct value created and printed
Variable Tracker
VariableStartAfter Step 2Final
pundefined{Name: "Alice", Age: 30}{Name: "Alice", Age: 30}
Key Moments - 2 Insights
Why do we write field names like Name: "Alice" when creating the struct value?
Using field names (like Name: "Alice") clearly assigns values to the correct fields, as shown in execution_table step 2. This avoids confusion and errors.
Can we create a struct value without specifying field names?
Yes, but then values must be in the exact order of fields in the struct. Using field names is safer and clearer, as shown in step 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of variable p after step 2?
A{Name: "Alice", Age: 30}
B{Age: 30, Name: "Alice"}
Cundefined
Dnil
💡 Hint
Check the 'Result' column in row for step 2 in execution_table
At which step is the struct value printed to the console?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the 'Action' column for printing in execution_table
If we omit field names when creating p, what must we do?
AUse pointers instead of values
BProvide values in the exact order of fields in the struct
CInitialize fields later one by one
DUse a map instead of a struct
💡 Hint
Refer to key_moments explanation about field names usage
Concept Snapshot
Creating struct values in Go:
- Define struct type with fields
- Create value using TypeName{Field1: val1, Field2: val2}
- Field names clarify assignments
- Values can be printed or used
- Omitting field names requires exact order
Full Transcript
This visual execution shows how to create struct values in Go. First, we define a struct type named Person with fields Name and Age. Then, we create a variable p of type Person by assigning values to Name and Age using field names. Next, we print the struct value p, which outputs {Alice 30}. The variable tracker shows p is undefined at start and holds the struct value after creation. Key moments explain why using field names is important and that omitting them requires exact order. The quiz tests understanding of variable values at steps, when printing happens, and rules about field names. This helps beginners see step-by-step how struct values are created and used.

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