Структура — это способ хранения различных типов информации в одном определяемом пользователем типе.

Например, если мы хотим сохранить имя сотрудника, его идентификатор и первичный навык, мы можем создать три отдельные переменные для каждой информации. Но если мы хотим хранить одну и ту же информацию для многих сотрудников, создание переменных для каждого сотрудника может стать утомительной задачей.

Поэтому вместо этого мы можем создать структуру типа EmployeeDetails, которая будет объединять имя, идентификатор сотрудника и первичный навык в одну структуру. Таким образом, мы можем использовать одну и ту же структуру для хранения этой информации для каждого сотрудника.

Давайте рассмотрим пример создания и использования структур.

Создание структуры:

Синтаксис для создания структуры в Go:

type StructureName struct {
  // structure definition 
}

В нашем примере мы можем написать нашу структуру, как показано ниже:

type EmployeeDetails struct {
   name string 
   employeeId int
   primarySkill string
}

В приведенном выше примере мы создали структуру типа EmployeeDetails, которая содержит сведения о сотруднике в {}.

Ключевое слово type вводит новый тип.

EmployeeDetails — это имя структуры

struct - ключевое слово, используемое для определения структуры

Экземпляры структуры:

В приведенном выше примере мы только что создали план структуры. Чтобы использовать это, нам нужно создать их экземпляры.

Например, если нам нужно создать новую переменную типа EmployeeDetails, мы можем написать, как показано ниже:

// Below we will create an new variable employee1 of type EmployeeDetails
// and assign values to it
var employee1 EmployeeDetails 
employee1 = EmployeeDetails("Jon", 123456, "GoLang")

// We can also create and assgin the value to employee2 in single go as well
employee2 := EmployeeDetails("Brock", 665439, "Java")

В приведенном выше примере мы := — это ярлык для создания и объявления переменной в одной строке.

Вложенные структуры:

Мы также можем создавать вложенные структуры в Go для простого управления более сложной структурой.

Например, если мы хотим добавить адрес для сотрудника, мы можем создать новую структуру типа Address и добавить новое свойство в структуры EmployeeDetails, как указано ниже:

// new struct of type Address
type Address struct {
   city string 
   pincode int
   state string
}

type EmployeeDetails struct {
   name string 
   employeeId int
   primarySkill string
   address Address // Added new property of type Address
}

Теперь, если мы хотим инициализировать и присвоить значения, мы можем сделать это, как показано ниже:

employee3 := EmployeeDetails{
                name: "Brock", 
                employeeId: 665439, 
                primarySkill: "Java",
                address: Address{
                  city: "Bengaluru",
                  pincode: 252636,
                  state: "Karnataka",
                },
              },

Доступ к полям структуры:

Вы можете получить доступ к полям структуры, используя запись через точку, как мы обращаемся к ней в объекте JavaScript.

fmt.Println(employee3.name) // It will print the name of employee "Brock"

Пример:

package main

import "fmt"

func main() {

 // new struct of type Address
 type Address struct {
  city    string
  pincode int
  state   string
 }

 // new struct of type EmployeeDetails
 type EmployeeDetails struct {
  name         string
  employeeId   int
  primarySkill string
  address      Address // Added new property of custom type Address
 }

 employee3 := EmployeeDetails{
  name:         "Brock",
  employeeId:   665439,
  primarySkill: "Java",
  address: Address{
   city:    "Bengaluru",
   pincode: 252636,
   state:   "Karnataka",
  },
 }
 fmt.Println(employee3) // It will print full struct value as below
 fmt.Println(employee3.name) // It will print the name of employee "Brock"
}
// Output
{Brock 665439 Java {Bengaluru 252636 Karnataka}}
Brock

Вы также можете поиграть с этим примером, перейдя по этой ссылке

Заключение:

Это базовый обзор того, как использовать структуры в Go. Это мощная функция языка Go для написания пользовательского типа и обработки сложных типов, которая используется во многих приложениях.

Я надеюсь, что этот пост поможет вам начать использовать структуру в Go!