Зарегистрируйтесь, чтобы продолжить обучение

Структуры в срезах Основы Go

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

Объявление среза структур

Срез структур можно объявить так же, как и срез базовых типов:

type User struct {
    Name  string
    Email string
}

func main() {
    users := []User{
        {Name: "Семен", Email: "semen@example.com"},
        {Name: "Юля", Email: "yulia@example.com"},
    }

    for _, u := range users {
        fmt.Println(u.Name, u.Email)
    }
}

Добавление новых элементов

Элементы добавляются с помощью append:

users = append(users, User{Name: "Алексей", Email: "alex@example.com"})

Изменение значений внутри среза

Так как срез хранит копии структур, при изменении элемента важно помнить о передаче по значению. Например:

users[0].Name = "Семен Иванов"

Изменение произойдет напрямую, так как мы работаем с элементом по индексу.

Срез указателей на структуры

Если нам нужно хранить и изменять объекты по ссылке, можно использовать срез указателей:

type User struct {
    Name  string
    Email string
}

func main() {
    users := []*User{
        {Name: "Семен", Email: "semen@example.com"},
        {Name: "Юля", Email: "yulia@example.com"},
    }

    users[0].Name = "Семен Иванов"  // Изменение отразится на оригинальном объекте
}

Использование указателей полезно, если структуры большие и их копирование неэффективно.

Поиск и фильтрация

Для поиска элементов в срезе структур можно использовать обычные циклы:

func FindUserByEmail(users []User, email string) *User {
    for i := range users {
        if users[i].Email == email {
            return &users[i]
        }
    }
    return nil
}

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff