DevGang
Авторизоваться

Golang: Интерфейсы

Интерфейсы определяются как набор сигнатур методов. Методы, объявленные в интерфейсе, не имеют тела (определения).

Давайте изучим эту концепцию на простом примере.

Общий обзор простого примера:

В этом простом примере я определил интерфейс (calculation) с двумя объявлениями методов (add(), mul()). У меня есть 2 типа структур (two_inputs, variable_inputs) и я сделал их для реализации этого интерфейса. Когда интерфейс реализуется типом, этот тип можно использовать во всех местах, где требуется этот тип интерфейса. В этом примере у нас есть функция с именем get_calcs(), которая имеет входной параметр интерфейса типа (calculation). Таким образом, любой тип, который реализует этот интерфейс (calculation), может использоваться для вызова этой функции. В нашем случае два типа структур two_inputs, variable_inputs реализуют интерфейс calculation, поэтому их можно использовать для вызова функции get_calcs().

Синтаксис:

interface_name interface{
    method_1() return_type
}
Объявление интерфейса<br>
Объявление интерфейса
Объявление структуры<br>
Объявление структуры

Теперь мы собираемся сделать эти структуры для реализации интерфейса.

В отличие от Java, Golang неявно реализует интерфейс.

Чтобы реализовать интерфейс в Go, нам просто нужно реализовать все методы интерфейса.

Метод интерфейса&nbsp;add() <br>
Метод интерфейса add()
Метод интерфейса&nbsp;mul() <br>
Метод интерфейса mul()
Функция для расчета<br>
Функция для расчета
Основная функция нашего кода<br>
Основная функция нашего кода

Результат:

Здесь в основной функции мы вызвали функцию get_calcs() с аргументами в качестве наших двух структур, реализующих интерфейс вычисления.

Реализация интерфейса неявна в Go.

В Java мы будем реализовывать интерфейс явно, используя ключевое слово implements.

Но в Go такого ключевого слова нет, реализация неявная.

Чтобы доказать это, позвольте мне сделать так, чтобы одна из наших структур (two_inputs или variable_inputs) не реализовывала ни одну функцию, объявленную в интерфейсе.

Я закомментировал функцию add() для two_inputs.

Удалена функция add() для структуры two_inputs<br>
Удалена функция add() для структуры two_inputs

В результате я получил эту ошибку

Отсутствует добавление метода для типа two_inputs<br>
Отсутствует добавление метода для типа two_inputs

Что говорит нам о том, что структура two_inputs не реализует все функции, объявленные в интерфейсе. Таким образом, мы не можем использовать тип two_inputs в качестве типа вычисления для функции get_calcs, которая имеет тип calculation.

#Golang
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В подарок 100$ на счет при регистрации

Получить