When we have complex groups of fields in our structs, they can be combined into their own struct! For example, in the Employee
struct, we have two separate fields for the first and last name of the employee. We can combine those two strings into their own struct called Name
:
type Name struct{ firstName string lastName string } type Employee struct{ name Name age int title string }
We create an instance of Employee
like so:
carl := Employee{Name{“Carl”, “Carlson”}, 32, “Engineer”}
To access the fields of the nested struct (Name
in this case), we chain together the field accesses like so:
fmt.Println(carl.name.lastName) // Output will be “Carlson”
We can also define the employee struct with the Name
struct anonymously like so:
type Employee struct{ Name age int title string }
Notice how the Name
file has no associated variable name with it.
Composing a struct in this way allows us to access the firstName
and lastName
fields directly from the Employee
struct.
carl := Employee{Name{“Carl”, “Carlson”}, 32, “Engineer”} fmt.Println(carl.firstName) // Output will be “Carl” fmt.Println(carl.lastName) // Output will be “Carlson”
We, of course, cannot have two anonymous fields of the same type (i.e., two Name
fields) as that would make it impossible to tell which field is being accessed (which firstName
if two anonymous Name
fields).
An anonymous field is used to field access easier and leads to cleaner code.
We now have the ability to organize struct information inside of existing structs! Let’s get some hands-on practice.
Instructions
Create a struct called Circle
that will contain the following two fields:
point
of type Point
radius
of type int
The point
field represents the x and y coordinates of the center of the circle
Print the x coordinate of the instance of Circle
called circle
.
Inside the Circle
struct, make the Point
field anonymous.
Now that there is no point
field by name you will need to modify the access you added in the last checkpoint.