Bird
Raised Fist0
Goprogramming~5 mins

Creating struct values in Go

Choose your learning style10 modes available
Introduction

Structs help group related data together. Creating struct values lets you store and use this grouped data easily.

When you want to represent a real-world object like a person or a car with multiple details.
When you need to pass multiple related values together in your program.
When you want to organize data clearly for easier reading and maintenance.
Syntax
Go
type StructName struct {
    Field1 FieldType1
    Field2 FieldType2
    // ... more fields
}

// Creating a struct value
varName := StructName{
    Field1: value1,
    Field2: value2,
}

Use the field names when creating struct values to avoid confusion.

You can also create struct values without field names, but it's less clear.

Examples
This creates a Person struct with Name "Alice" and Age 30.
Go
type Person struct {
    Name string
    Age  int
}

p := Person{
    Name: "Alice",
    Age:  30,
}
This creates a Point struct with X=10 and Y=20 without using field names.
Go
type Point struct {
    X int
    Y int
}

p := Point{10, 20}
You can also create an empty struct and set fields later.
Go
var p Person
p.Name = "Bob"
p.Age = 25
Sample Program

This program creates a Car struct value and prints its fields.

Go
package main

import "fmt"

type Car struct {
    Brand string
    Year  int
}

func main() {
    myCar := Car{
        Brand: "Toyota",
        Year:  2022,
    }
    fmt.Println("My car brand is", myCar.Brand)
    fmt.Println("It was made in", myCar.Year)
}
OutputSuccess
Important Notes

Always use field names when creating struct values for better clarity.

Struct fields can be accessed and changed using dot notation.

Summary

Structs group related data into one unit.

Create struct values using field names for clarity.

You can set or change fields after creating the struct.

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