# Structs in Go

A struct is a composite datatype that groups together many fields of different types into one object. This blog post will go over the basics of how to declare a struct and assign values to its attributes.

In Go, a struct is defined using the `type` keyword. The general way of defining a struct is as follows:

```go
type <struct_name> struct {
    // struct attributes
}
```

The code block below does two things: it defines a struct called `person` that has `name` (type `string`) and `age` (type `int`) as its attributes, and it declares an object of this type:

```go
import "fmt"

type person struct {
    firstName string
    age int
}
person1 := person{firstName: "Anna", age: 35}

fmt.Println(person1)  // {Anna 35}
fmt.Println(person1.firstName)  // Anna
fmt.Println(person1.age)  // 35
```

Structs are also mutable, so we can change the value of a struct’s attribute:

```go
import "fmt"

person2 := person{firstName: "Allison", age: 20}

fmt.Println(person2)  // {Allison 20}
person2.age += 1
fmt.Println(person2)  // {Allison 21}
```

It is possible that only one variable is a struct, and so it doesn’t make sense to give the struct a name. The following code block creates an object `flower` with attributes `colour` and `petal_number`:

```go
import "fmt"

flower := struct {
	colour       string
	petal_number int
}{
	"blue",
	6,
}
fmt.Println(flower)  // {blue 6}
```
