LINUX.ORG.RU

История изменений

Исправление nikolnik, (текущая версия) :

  1. Забыть все, что ты делал раньше в си.
  2. Выше уже указали на импорт пакетов.

    К примеру: https://github.com/lochnessathome/RETIA/blob/master/join/join.go

  3. Огромный вложенный блок if, тогда как если написать if value != nil { return } будет гораздо меньше вложенности
  4. Else не нужен после оператора return
  5. snake case, все должно быть camelCase
  6. строка 122: почему сразу не сделать return?
  7. findCommonAttributes(lrelation, rrelation *unit.Relation) Сразу видно насление си. го не си. У структуры Relation можно создать метод findCommonAttributes(Relation)
  8. Возврат пустых значений и невозврат ошибки при этом.
  9. И самое важное, в общем-то, из-за чего придется переписать половину кода: не используй функции и переменные уровня пакетов.

    Функции и переменные уровня пакетов, это:

    • Тоже самое, что статические классы и свойства в жаве\шарпе.
    • Это делает твой код нетестируемым.
    • Приводит к бек-сайд эффектам
    • Потоконебезопасны
    • Тоже самое, что глобальные переменные в жаваскрипте.
    • Выворачивание потрохов реализации (нарушение инкапсуляции)
    • Позволяет манки-патчить, т.к. глобальные переменные перезаписываемые.

Короче, как и в шарпе\жаве, переменные\функции уровня пакетов, не должны хранить или изменять состояние сущностей, только передавать.

Исходная версия nikolnik, :

0. Забыть все, что ты делал раньше в си.

1. Выше уже указали на импорт пакетов.

К примеру: https://github.com/lochnessathome/RETIA/blob/master/join/join.go

2. Огромный вложенный блок if, тогда как если написать if value != nil { return } будет гораздо меньше вложенности 3. Else не нужен после оператора return 4. snake case, все должно быть camelCase 5. строка 122: почему сразу не сделать return? 6. findCommonAttributes(lrelation, rrelation *unit.Relation) Сразу видно насление си. го не си. У структуры Relation можно создать метод findCommonAttributes(Relation) 7. Возврат пустых значений и невозврат ошибки при этом. 8. И самое важное, в общем-то, из-за чего придется переписать половину кода: не используй функции и переменные уровня пакетов.

Функции и переменные уровня пакетов, это: 1. Тоже самое, что статические классы и свойства в жаве\шарпе. 2. Это делает твой код нетестируемым. 3. Приводит к бек-сайд эффектам 4. Потоконебезопасны 7. Тоже самое, что глобальные переменные в жаваскрипте. 5. Выворачивание потрохов реализации (нарушение инкапсуляции) 6. Позволяет манки-патчить, т.к. глобальные переменные перезаписываемые.

Короче, как и в шарпе\жаве, переменные\функции уровня пакетов, не должны хранить или изменять состояние сущностей, только передавать.