@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
}

ну и для чего здесь интерфейс? Ну есть он и есть, уберешь интерфейс результат будет тот же, подскажите пожалуйста для чего они нужны понятным языком?
  • Вопрос задан
  • 274 просмотра
Решения вопроса 2
vabka
@vabka
Токсичный шарпист
Интерфейсы нужны для полиморфизма.
Конкретно в твоём случае да - разницы нет.
Но чисто в теории ты бы мог сделать вот так:
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.
Эта проблема отлично решается при помощи интерфейсов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 21:17
5000 руб./за проект
28 мар. 2024, в 20:46
150000 руб./за проект
28 мар. 2024, в 20:37
50000 руб./за проект