Sobes.tech
Назад к вопросам
Senior
3

Как сделать структуру данных generic (работающей с любым типом значений) в Go?

Компании, где спрашивали
Cloud.ru

Ответ от нейросети

sobes.tech AI

В Go с версии 1.18 появились обобщения (generics), которые позволяют создавать структуры данных, работающие с любыми типами.

Для создания generic-структуры нужно определить тип с параметром типа, например:

type Stack[T any] struct {
    elements []T
}

func (s *Stack[T]) Push(element T) {
    s.elements = append(s.elements, element)
}

func (s *Stack[T]) Pop() (T, bool) {
    if len(s.elements) == 0 {
        var zero T
        return zero, false
    }
    index := len(s.elements) - 1
    elem := s.elements[index]
    s.elements = s.elements[:index]
    return elem, true
}

Здесь T — параметр типа, any — ограничение, означающее любой тип. Такая структура Stack может работать с любыми типами данных, например Stack[int] или Stack[string].

Таким образом, generics в Go позволяют писать универсальные структуры и функции, параметризованные типами.