170 похожих чатов

Привет друзья! У меня есть теоретический вопрос по названию и

функциональному назначению пакетов в GO.
В языках, где есть неймспейсы видна иерархия классов. То есть имея какой-то, например, обработчик запросов у нас будут какие-то другие пакеты с классами типа:
Handler\Model\SomeResponse.class
Handler\Factory.class
Handler\Middleware\SomeMiddleware.class
и тд.

Вот в примере выше я вижу иерархию классов, вижу назначение и имею понимание того, что должно находиться в пакете по названию

Вопрос, как в го бы выглядела подобная структура?

это выглядело бы как:
hander.SomeResponse
handler.Factory
handler.SomeMiddleware

или нужно создавать отдельные под пакеты типа
handlermiddleware.SomeMiddleware
handler.Factory
и тд

7 ответов

15 просмотров

Боюсь, что нет однозначного ответа на ваш вопрос. Golang не диктует вам, какую структруру проектов использовать. Вы должны сами определить целесообразность того или иного подхода в каждом конкретном случае. К примеру, для реализации простых модулей/проектов вполне подойдёт плоская структрура с hander.SomeResponse handler.Factory handler.SomeMiddleware, но как только начинаются проблемы с неймингами, стоит подумать об использовании отдельных директорий для ваших абстракций/реализаций a la response.SomeResponse factory.SomeFactory middleware.SomeMiddleware.

Андрей-Кутин Автор вопроса
vim Ivakhin
Боюсь, что нет однозначного ответа на ваш вопрос. ...

А есть какой-то манифест или может книга или какой-либо другой ресурс на котором прописано, что вообще должен нести в себе пакет в Go? Мне просто сложно понять как правильно определять функционал в пакеты или на каком моменте стоит разносить пакет над под пакеты.

Андрей Кутин
А есть какой-то манифест или может книга или какой...

Здравый смысл и опыт, сын ошибок трудных, вам в помощь)

Андрей Кутин
А есть какой-то манифест или может книга или какой...

тема намеренно оставлена для холиваров между коллегами) в internal все клади! нет, давайте по пакетам разложим, и т д

Андрей Кутин
А есть какой-то манифест или может книга или какой...

Интересный доклад на эту тему от Kat Zien https://www.youtube.com/watch?v=oL6JBUk6tj0

Rostislav Teryaev
https://blog.golang.org/organizing-go-code

Эта статья тоже не даёт однозначного ответа на заданный вопрос. It is easy to just throw everything into a "grab bag" package, but this dilutes the meaning of the package name (as it must encompass a lot of functionality) and forces the users of small parts of the package to compile and link a lot of unrelated code. On the other hand, it is also easy to go overboard in splitting your code into small packages, in which case you will likely becomes bogged down in interface design, rather than just getting the job done.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта