So, a Struct is another aggregate data type, another composite data type, as an aggregate type meaning groups together objects of arbitrary data types into one object, and it's useful for a lot of things, usually it's for organizational purposes, it really helps. So, let's give an example, easy way to talk about it. You got, let's say you want to make a Struct, Struct is short for structure by the way, and by the way this is taken also straight from say C, C are Structs too. So, say I want to make a structure that describes a person, a Person Struct. So, say every person has certain features a name, an address and a phone number. So, if every person, I want to represent these three different aspects of a person. So, one option would be to have three separate variables, for every person I'll have three separate variables and the programmer has to remember that they're related. So, maybe I have named and I might use naming for that, so I might say we'll name one, address one, phone one. I have three different values, right? I put one after all them so I, as a programmer, can remember, "Okay, this is name one and address one and phone one, they must be related, they all have one after them, right?" The next person I make, I'll call it name two, address two, phone two, and so on. So, that's one way. In that scenario, these three pieces of information name, address, phone, they are related, they have to be, the program of themselves has to remember that they're related. Okay? That this name is related to this address and this phone, where this other name is related to this address and this phone. Now, another way, probably better way to do this option two, is to make a single Struct, that represents a person and that Struct, it aggregates all three variables. So, this one object now contains a name, address, and phone number of one person. So, they are related because they are in the same object and so when you're accessing them, it is obvious, that if you're accessing them from the same object, you know that they are related to the same person. So, that's what a Struct is for, for bringing together different variables that are related in the application and putting them together so that you, as a programmer, know that they are related and they're related to the same person or whatever the object is in, in the application that you're talking about. So, here's an example of a Struct. You've got, so we're defining a type, a Struct type and we're going to call it person and this person has three fields, three pieces of information, a name, address, and phone number. So, notice how I'm defining this Struct type, it's called person, I give its name as a person and each one of these fields, name, address, and phone has a type, name string, address string, phone string. After that, once I define this type, I can define any number of persons, I can say var p1 is a person, var p2 is a person, and so on, and p1 in this case, it's going to have a name, address, and phone number on its own. So, each property is called a field, so name is a field, address is a field, phone is a field, and p1 can have values for all of those fields that are unique from another variable p2, which is a person or p3, so I can have any number of persons in there. So, if I want to access the fields of the structure, by access I mean, read from them or write to them, change them, I use dot notation. This is not like with arrays. With arrays, you use a square brackets, you use an index, use dot notation here. So, p1.name, if I want to assign that to Joe, I can say p1.name equals Joe and that will sign the field, the name field of p1 to string Joe. Also I can read in the same way, I can say x equals p1.address and that will assign X to be the address of p1. So, use dot notation rather than the brackets that you would use with arrays. Initializing structures, you can initialize them using the new function. One way to make an empty Struct, it initializes all the fields to zero, zero values. So, like in this person structure, the values are all strings, right? So, the zero value is going to be empty string. So, I can say p1:= new person and it'll make a new person that's empty, so zeroed out. So, the name, address and phone number will all be empty string. Another way you can initialize the structure is you can initialize it with a Struct literal, so if you want to give values to all the fields when you create the person and we're showing that here, p1: = person, then in parentheses, I'd give the Struct name, let's give this a Struct name and then Struct value, right? So, name: Joe, address: a.st, a street and then comma phone: 123. So, in this case, I'm using a Struct literal and I'm making a new structure but I'm also assigning all the fields to different values Joe and a street and 123. So, I can do that too.