Зачем нужны интерфейсы в golang?

Вопрос может показаться глупым.Я недавно изучаю golang. Естественно читал статьи, но так и не понял. Что конкретно я могу сделать с интерфейсами и не могу без них(или с большими затратами)?
Просто я в коде пока их не применял и хочу разобраться, когда их стоит использовать
  • Вопрос задан
  • 4683 просмотра
Пригласить эксперта
Ответы на вопрос 3
Ninazu
@Ninazu
Сам искал ответа на этот вопрос. И вдохновившись примером с лампочками, таки разобрался)

Пусть тут полежит для потомков
package main

import "fmt"

type LampDiode struct{}

func (l *LampDiode) ScrewOn() string {
	return "Lamp 1"
}

type LampIncandescent struct{}

func (l *LampIncandescent) ScrewOn() string {
	return "Lamp 2"
}

type Lamp interface {
	ScrewOn() string
}

func Chandelier(l Lamp) {
	fmt.Println(l.ScrewOn())
}

func main() {
	var l1 Lamp
	l1 = new(LampDiode)
	Chandelier(l1)

	var l2 Lamp
	l2 = new(LampIncandescent)
	Chandelier(l2)
}
Ответ написан
Комментировать
shpaker
@shpaker
Вольный хлебопашец
Например я пишу для себя пакет, в котором есть функция которая должна принимать указатель на какую либо структуру, и структура должна иметь определенные методы которые необходимо вызывать внутри функции. А пользователь пакета в своей программе должен писать свои структуры и передавать их описанной в пакете функции. Использовав интерфейс (или указав её как тип передаваемого) внутри функции мы проверяем наличие необходимых методов у переданной структуры.
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
Приведу пример из реальности: у тебя есть люстра, туда подходит множество лампочек (диодные, накаливания, галогенки, какие хочешь в общем...) и все это потому, что цоколь - идентичный.
Интерфейс дает возможность использовать разные реализации структур, но обладающие единым интерфейсом (немного тавтологии богу тавтологии).
---
Если бы все цоколи были разные: вам пришлось бы менять либо люстру, либо лампочки.
Если не использовать интерфейсы - вы не сможете использовать другие структуры, даже если они полностью идентичны.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы