Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: Go, sort, slice, struct, sort.Interface

Как отсортировать слайс структур по числовому полю в Go?

Вопрос проверяет знание сортировки пользовательских типов данных в Go с использованием пакета sort и интерфейса sort.Interface.

Короткий ответ

Для сортировки слайса структур по числовому полю в Go нужно реализовать интерфейс sort.Interface для вашего типа. Этот интерфейс требует три метода: Len(), Less() и Swap(). В методе Less() вы сравниваете нужное числовое поле. После этого вызываете sort.Sort(), передавая ваш слайс, приведенный к реализованному типу.

Длинный ответ

Сортировка слайса структур в Go

В Go нет встроенной сортировки для произвольных типов данных, таких как структуры. Для этого используется пакет sort, который предоставляет универсальный интерфейс sort.Interface. Чтобы отсортировать слайс структур, необходимо определить тип, реализующий этот интерфейс, и затем вызвать sort.Sort().

Реализация интерфейса sort.Interface

Интерфейс sort.Interface требует три метода:

  • Len() int — возвращает длину слайса.
  • Less(i, j int) bool — определяет порядок сортировки: возвращает true, если элемент с индексом i должен стоять перед элементом с индексом j.
  • Swap(i, j int) — меняет местами элементы с индексами i и j.

Пример сортировки слайса структур Person по полю Age (int):

package main

import (
	"fmt"
	"sort"
)

type Person struct {
	Name string
	Age  int
}

type ByAge []Person

func (a ByAge) Len() int           { return len(a) }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }

func main() {
	people := []Person{
		{"Alice", 30},
		{"Bob", 25},
		{"Charlie", 35},
	}
	sort.Sort(ByAge(people))
	fmt.Println(people) // [{Bob 25} {Alice 30} {Charlie 35}]
}

Использование sort.Slice (упрощенный способ)

Начиная с Go 1.8, можно использовать sort.Slice, который принимает слайс и анонимную функцию для сравнения. Это избавляет от необходимости объявлять отдельный тип:

sort.Slice(people, func(i, j int) bool {
	return people[i].Age < people[j].Age
})

Этот подход короче и удобнее для одноразовой сортировки.

Вывод

Сортировка слайса структур в Go выполняется через реализацию интерфейса sort.Interface или с помощью sort.Slice. Второй способ предпочтительнее для простых случаев, так как требует меньше кода. Понимание обоих подходов важно для работы с данными в Go.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • Golang

    Golang

Ключевые слова

#Go

#sort

#slice

#struct

#sort.Interface

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.