питонист, до питона писал на яве. Дали на работе легаси проект на го, создающий таск в жире по запросу. Всё сделано тупо на функциях, типа: createJiraIssue, fillAttachments, setAssignee и так далее
Нужно сделать поддержку разных проектов, притом там разные поля, разная логика работы с назначениями и т.д.
Первая мысль: сделать абстрактный класс IssueBuilder, общее вынести в родителя, и 2 сабкласса под разные проекты
Но это же не go-way
Могу конечно "имитировать" классы с помощью вставки полей через
type myIssueBuilder struct {
*baseIssueBuilder
subclassField1
subclassField2
}
+ интерфейс под это дело
Но опять же есть ощущение что тут надо как-то иначе.
Как сделать красиво?
https://medium.com/german-gorelkin/embedding-in-go-6739e46c1be1
спасибо и вы считаете, типа нормально сделать формата type myIssueBuilder struct { baseIssueBuilder field1 field2 } тупо базовую структуру "встроить"? выглядит криво, может в го как-то в целом иначе надо?
Не, у нас так и делается
Копированием, композицией, в зависимости от ситуации
Если для ваших сущностей нужно написать общие функции для выполнения каких-то последовательностей действий, то, скорее всего, вам нужно передавать в эти функции не сами сущности, а интерфейсы, реализуемые этими сущностями, и внутри функций просто вызывать методы интерфейсов в нужных местах. Короче, почитайте про интерфейсы в Go. Они классные :)
Обсуждают сегодня