Задать вопрос
@loljapanes

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

Не понимаю для чего нужны интерфейсы в go, пересмотрел куча туториалов, статей, но не понял для чего они нужны. Пример:
type Numbers struct {
	Num1 int
	Num2 int
}

type NumberInterface interface {
	Sum() int
}

func (n Numbers) Sum() int {
	return n.Num1 + n.Num2
}

func main() {
	numbers := Numbers{1, 5}
	fmt.Println(numbers.Sum()) //6
}

ну и для чего здесь интерфейс? Ну есть он и есть, уберешь интерфейс результат будет тот же, подскажите пожалуйста для чего они нужны понятным языком?
  • Вопрос задан
  • 275 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 2
Интерфейсы нужны для полиморфизма.
Конкретно в твоём случае да - разницы нет.
Но чисто в теории ты бы мог сделать вот так:
type Numbers struct {
  Num1 int
  Num2 int
}

type ThreeNumbers struct {
  Num1 int
  Num2 int
  Num3 int
}

func (n Numbers) Sum() int {
  return n.Num1 + n.Num2
}

func (n ThreeNumbers) Sum() int {
  return n.Num1 + n.Num2 + n.Num3
}

func SumAll(numbers NumberInterface) int {
  return numbers.Sum()
}

Функция SumAll будет работать с любыми типами, которые реализуют интерфейс NumberInterface, причём даже если они сами об этом не в курсе, благодаря утиной типизации.
Ответ написан
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
В вашем примере не хватает самого важного, чтобы стало понятно - вызова функции с параметром типа интерфейс.
func someFunc(numbers NumberInterface) {
   numbers.Sum()
}


Если не будет интерфейсов - вы можете передать только конкретный тип Numbers.
А если вы создадите тип Numbers2 - то вы не сможете передать его в туже функцию, у которой тип аргумента Numbers.
Эта проблема отлично решается при помощи интерфейсов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы