«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как мы можем создавать универсальные функции в Golang для разных типов данных?

Как мы можем создавать универсальные функции в Golang для разных типов данных?

Опубликовано 9 ноября 2024 г.
Просматривать:420

 How Can We Create Generic Functions in Golang for Different Data Types?

Параметры общего метода в Golang

В Go общим требованием является наличие функции, которая работает с данными разных типов. Возьмем, к примеру, функцию, подсчитывающую количество элементов в срезе определенного типа. Как можно спроектировать эту функцию для обработки любого типа данных, а не только определенного типа, для которого она изначально была разработана?

Один подход заключается в использовании интерфейсов, которые по сути являются контрактами, определяющими набор методов, которые тип должен реализовать в соответствии с интерфейсом. Используя интерфейсы в качестве параметров метода, мы можем писать универсальные функции, которые могут работать с любым типом, реализующим требуемый интерфейс.

Рассмотрим следующий пример, в котором мы стремимся создать универсальную функцию Count, подсчитывающую количество элементов. в срезе:

func Count[T any](s []T) int {
  return len(s)
}

Используя подобные дженерики, мы можем передавать срезы любого типа в Count, что позволяет ему динамически подсчитывать элементы в зависимости от типа входных данных.

Кроме того, мы можем использовать интерфейсы для реализации универсальных методов для конкретных задач. Например, мы можем определить идентифицируемый интерфейс с помощью метода GetID и создать общую функцию FindByID, которая ищет элемент внутри среза на основе его значения идентификатора, независимо от фактического типа элементов среза:

type Identifiable interface {
  GetID() int
}

func FindByID[T Identifiable](s []T, id int) *T {
  for i, v := range s {
    if v.GetID() == id {
      return &s[i]
    }
  }
  return nil
}

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3