История изменений
Исправление nikolnik, (текущая версия) :
- Забыть все, что ты делал раньше в си.
- Выше уже указали на импорт пакетов.
К примеру: https://github.com/lochnessathome/RETIA/blob/master/join/join.go
- Огромный вложенный блок if, тогда как если написать if value != nil { return } будет гораздо меньше вложенности
- Else не нужен после оператора return
- snake case, все должно быть camelCase
- строка 122: почему сразу не сделать return?
- findCommonAttributes(lrelation, rrelation *unit.Relation) Сразу видно насление си. го не си. У структуры Relation можно создать метод findCommonAttributes(Relation)
- Возврат пустых значений и невозврат ошибки при этом.
- И самое важное, в общем-то, из-за чего придется переписать половину кода: не используй функции и переменные уровня пакетов.
Функции и переменные уровня пакетов, это:
- Тоже самое, что статические классы и свойства в жаве\шарпе.
- Это делает твой код нетестируемым.
- Приводит к бек-сайд эффектам
- Потоконебезопасны
- Тоже самое, что глобальные переменные в жаваскрипте.
- Выворачивание потрохов реализации (нарушение инкапсуляции)
- Позволяет манки-патчить, т.к. глобальные переменные перезаписываемые.
Короче, как и в шарпе\жаве, переменные\функции уровня пакетов, не должны хранить или изменять состояние сущностей, только передавать.
Исходная версия 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. Позволяет манки-патчить, т.к. глобальные переменные перезаписываемые.
Короче, как и в шарпе\жаве, переменные\функции уровня пакетов, не должны хранить или изменять состояние сущностей, только передавать.