Я работаю над переписыванием старого Java-проекта на Go.
Я уже сделал несколько Go на работе, но я не могу понять, как я могу перевести свой ООП (с помощью абстрактных классов,и т.д.) к философии Go.
По идее, у меня есть два типа (скоро 3), у которых есть некоторые общие методы, но некоторые другие (ну всего 1 или 2 макс.) должны иметь одинаковые подписи, но неодни и те же тела.
Я знаю, что у Го нет какого-то наследства. Пока у меня есть что-то вроде этого:
type A struct {...}
func (a *A) M1 (){ stuff1 }
func (a *A) M2 (){ stuff2 }
func (a *A) SM (){ special stuff A }
затем:
type B struct {...}
func (b *B) M1 (){ stuff1 }
func (b *B) M2 (){ stuff2 }
func (b *B) SM (){ special stuff B }
Я не знаю, как Го справляется с этим. В Java я создал абстрактный класс, а затем реализовал его с моими двумя конкретными классами.
Мне не нужно дублировать M1 () и M2 (), а иметь универсальный тип для вызова этихметоды, а затем просто нужно определить SM () для обоих типов.