A struct is used to store variables of different data types. For example,
Suppose we want to store the name and age of a person. We can create two variables: name and age and store value.
However, suppose we want to store the same information of multiple people.
In this case, creating variables for a person might be a tedious task. We can create a struct that stores the name and age to overcome this.
And, we can use this same struct for every person.
Declare Go Struct
The syntax to declare a struct in Go is:
type StructureName struct {
  // structure definition 
}
Here,
struct- keyword used to define a structureStructName- the name of the structure
Let's see an example,
type Person struct {
  name string
  age  int
}
Here, we have declared a struct named Person. Inside the curly braces {}, the struct contains two variables name and age.
Struct instances
A struct definition is just a blueprint. To use a struct, we need to create an instance of it. For example,
type Person struct {
  name string
  age  int
}
// create an instance of struct
var person1 Person
Here, we have created an instance person1 followed by the name of the struct Person.
Now, we can use the person1 instance to access and define the struct properties.
// define the value of name and age
person1 = Person("John", 25)
We can also directly define a struct while creating an instance of the struct. For example,
person1 := Person("John", 25)
Here, John will be assigned to the name variable and 25 will be assigned to the age variable of the Person struct.
Example: Golang struct
package main
import "fmt"
func main() {
  // declare a struct
  type Person struct {
    name string
    age  int
  }
  // assign value to struct while creating an instance
  person1 := Person{ "John", 25}
  fmt.Println(person1)
  // define an instance
  var person2 Person
  // assign value to struct variables
  person2 = Person {
    name: "Sara",
    age: 29,
  }
  fmt.Println(person2)
}
Output
{John 25}
{Sara 29}
Access a struct in Golang
We can access individual elements of a struct using the struct instances. For example,
// Program to access the individual elements of struct
package main
import "fmt"
func main() {
  // declare a struct
  type Rectangle struct {
    length  int
    breadth int
}
  // declare instance rect1 and defining the struct
  rect := Rectangle{22, 12}
  // access the length of the struct
  fmt.Println("Length:", rect.length)
  // access the breadth of the struct
  fmt.Println("Breadth:", rect.breadth)
  
  area := rect.length * rect.breadth
  fmt.Println("Area:", area)
}
Output
Length: 22 Breadth: 12 Area: 264
Here, we have used the . (dot) symbol to access the property of a struct.
rect.length- access the value of the length variable from the structrect.breadth- access the value of the breadth variable from the struct
Function inside a Struct in Go
Go also allows us to create a function inside a struct. It treats function as a field of struct. For example,
// Program to use function as a field  of struct
package main
import "fmt"
// initialize the function Rectangle
type Rectangle func(int, int) int
// create structure
type rectanglePara struct {
  length  int
  breadth int
  color   string
  // function as a field of struct
  rect Rectangle
}
func main() {
  // assign values to struct variables
  result := rectanglePara{
    length:  10,
    breadth: 20,
    color:   "Red",
    rect: func(length int, breadth int) int {
      return length * breadth
    },
  }
  fmt.Println("Color of Rectangle: ", result.color)
  fmt.Println("Area of Rectangle: ", result.rect(result.length, result.breadth))
}
Output
Color of Rectangle: Red Area of Rectangle: 200
In the above example, we have defined a function Rectangle as a field of struct rectanglePara and used the function to find the area of a rectangle.