Golang: Структуры данных для веб-сайтов

Зачем нужны структуры в Go?

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

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

Структура определяется вне функции, начиная с ключевого слова type, за которым следует имя структуры (рекомендуется использовать заглавные буквы для экспорта) и ключевое слово struct. Внутри фигурных скобок перечисляются поля структуры (переменные).

Например, структура User с полями name (строка), age (беззнаковое 16-битное целое число), balance (16-битное целое число), rating (число с плавающей точкой двойной точности) и happiness (число с плавающей точкой двойной точности):

type User struct {
    name string
    age  uint16
    balance int16
    rating float64
    happiness float64
}

Создание объектов

Существует несколько способов создания объектов структуры:

  1. Инициализация с помощью var:
var bob User

Этот способ используется реже, чем другие.

  1. Инициализация с указанием значений:
bob := User{
    name: "Bob",
    age: 25,
    balance: -50,
    rating: 4.2,
    happiness: 0.8,
}
  1. Инициализация без указания ключей:
bob := User{"Bob", 25, -50, 4.2, 0.8}

Второй и третий способы эквивалентны.

Работа со структурой и вывод данных

Пример создания объекта bob и вывода его имени:

fmt.Println("User name is ", bob.name)

Изменение имени:

bob.name = "Alex"

Создание методов

Метод для структуры определяется с помощью ключевого слова func. Первый параметр метода – это указатель (*) или значение структуры, через которую вызывается метод.

Пример метода getAllInfo:

func (u User) getAllInfo() string {
    return fmt.Sprintf("User name is %s, he is %d and he has %d", u.name, u.age, u.balance) // Исправлено: u.money на u.balance
}

Вызов метода:

fmt.Println(bob.getAllInfo())

Изменение значений через методы

Метод для изменения имени с использованием указателя на структуру (*User):

func (u *User) setNewName(newName string) {
    u.name = newName
}

Использование указателя гарантирует изменение значения в исходном объекте.

Вызов метода:

bob.setNewName("Alex")

Передача объектов

При работе с малыми структурами допустима передача по значению. Для больших структур рекомендуется передача по ссылке (*) для повышения эффективности.

В этом уроке были рассмотрены структуры в Go – эффективный инструмент для работы с данными в программах.

Что будем искать? Например,программа