• Как и где инициализировать все компоненты проекта на Go в стиле ООП?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Евгений правильно написал - самый правильный способ. Вообще точка входа в программе всегда одна (main и init), а уже потом init и прочие функции в пакетах которые вызывают из package main.

    package main
    import mypackage
    
    func init() {
    ... что-то сделали, что-то инициализировали, например доступ к базе или ещё чему
    ... ещё что-то инициализировали...
    ... начинаем инициализировать mypackage
    mypackage.DB = DB // проинициализировали доступ в базу в пакете:)
    mypackage.Other = Other // ещё что-то проинициализировали в пакете...
    }
    
    func main() {
    ... другой вопрос что можно и так, но в этом случае в пакете чуть больше логики...
       obj := package.Init()
       obj.SetDB(DB)
       obj.SetOther(Other)
    
       go obj.Start()
    }

    При желании можно ещё пару способов придумать...
    Ответ написан
    2 комментария
  • Как и где инициализировать все компоненты проекта на Go в стиле ООП?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Недавно решал такую же проблему:
    Первый раз пробовал просто хардкодом, примерно так:
    + не жалко переписать полностью
    - слабо конфигурабельно

    Вторая попытка - упор на конфигурабельность но так же средствами чистого go:
    + можно настроить практически все
    - тяжело поддерживать.

    Третья попытка:
    Переписал на базе самописного сервис-локатора примерно так:
    + мало кода, все настройки в yaml
    - процесс инициализации не контролируем

    Четвертая попытка:
    Создана структура под конфигурацию, наполняется данными через viper + запускается через cobra примерно так:
    + в настройки выносится только необходимое, а не вообще все, как в случае с сервис локатором
    + процесс инициализации полностью контролируемый

    В общем могу по рекомендовать следующее:
    1. создайте структуру для всей вашей конфигурации приложения;
    2. записывайте туда пользовательские настройки при начале инициализации;
    3. для всех опциональных настроек обязательно должны быть значения по умолчанию;
    4. не гонитесь за максимальной гибкостью, это приведет вас в тупик;
    5. непосредственно создание компонентов выполняйте на базе сформированного объекта конфигурации, не стоит вытягивать отдельно каждую настройку через viper или его аналоги.
    Ответ написан
    Комментировать