# Create, initialize and compare structs

yourbasic.org/golang ## Struct types

A struct is a typed collection of fields, useful for grouping data into records.

``````type Student struct {
Name string
Age  int
}

var a Student    // a == Student{"", 0}
a.Name = "Alice" // a == Student{"Alice", 0}
``````
• To define a new struct type, you list the names and types of each field.
• The default zero value of a struct has all its fields zeroed.
• You can access individual fields with dot notation.

## 2 ways to create and initialize a new struct

The `new` keyword can be used to create a new struct. It returns a pointer to the newly created struct.

``````var pa *Student   // pa == nil
pa = new(Student) // pa == &Student{"", 0}
pa.Name = "Alice" // pa == &Student{"Alice", 0}
``````

You can also create and initialize a struct with a struct literal.

``````b := Student{ // b == Student{"Bob", 0}
Name: "Bob",
}

pb := &Student{ // pb == &Student{"Bob", 8}
Name: "Bob",
Age:  8,
}

c := Student{"Cecilia", 5} // c == Student{"Cecilia", 5}
d := Student{}             // d == Student{"", 0}
``````
• An element list that contains keys does not need to have an element for each struct field. Omitted fields get the zero value for that field.
• An element list that does not contain any keys must list an element for each struct field in the order in which the fields are declared.
• A literal may omit the element list; such a literal evaluates to the zero value for its type.

For further details, see The Go Language Specification: Composite literals.

## Compare structs

You can compare struct values with the comparison operators `==` and `!=`. Two values are equal if their corresponding fields are equal.

``````d1 := Student{"David", 1}
d2 := Student{"David", 2}
fmt.Println(d1 == d2) // false
``````

### Go step by step Core Go concepts: interfaces, structs, slices, maps, for loops, switch statements, packages.