Что такое структура (`struct`) в Go и каковы её ключевые особенности?

Ответ

Структура (struct) в Go — это композитный тип данных, который объединяет в себе именованные поля с различными типами. Она используется для группировки связанных данных в единую сущность.

Объявляется с помощью ключевых слов type и struct:

type Employee struct {
    ID        int
    FirstName string
    LastName  string
    IsActive  bool
}

Ключевые особенности структур в Go:

  1. Передача по значению (Value Type):

    • По умолчанию структуры передаются в функции по значению, то есть создаётся полная копия объекта. Изменения внутри функции не влияют на исходную структуру.
  2. Передача по указателю:

    • Чтобы избежать копирования и иметь возможность изменять исходный объект, структуры передают по указателю (*Employee). Это более эффективно для больших структур.
  3. Встраивание (Embedding):

    • Go поддерживает встраивание одной структуры в другую (аналог композиции, часто сравнивают с наследованием). Поля и методы встроенной структуры "поднимаются" на уровень внешней.
      
      type Person struct {
      Name string
      Age  int
      }

    type Employee struct { Person // Встроенная структура Salary int }

    // Использование: // emp := Employee{} // emp.Name = "John" // Доступ к полю встроенной структуры

  4. Методы:

    • Для структур можно определять методы — функции с "получателем" (receiver), который связывает функцию с конкретным типом.
      func (p *Person) Greet() string {
      return "Hello, my name is " + p.Name
      }