Alex
swagger
Это видели . А аналоги есть ? Неплохие
Alex
А confluence используете ?
Michael
Это видели . А аналоги есть ? Неплохие
гугл подсказывает тысячи их, но на практике вполне им довольны
Alex
гугл подсказывает тысячи их, но на практике вполне им довольны
А на своем сервере можно поднять или это только облачное решение с подпиской?
Vladislav
фабричная функция (не ооп)
Ну это на самом деле неважно. Т.к. в коммьюнити принято определенные функции называть конструкторами. И нет никакого смысла это оспаривать и прививать другим. (Учитывайте, что я имею именно функции вида NewType. Из этого имени следует, что назначение этой функции примерно соответсвует конструкторам.)
Michael
Платно ?
я не в курсе, вероятно, да
Alex
Aleksandr
Ну это на самом деле неважно. Т.к. в коммьюнити принято определенные функции называть конструкторами. И нет никакого смысла это оспаривать и прививать другим. (Учитывайте, что я имею именно функции вида NewType. Из этого имени следует, что назначение этой функции примерно соответсвует конструкторам.)
да, назначение фабричной функции аналогично конструкторам - только место применения разное. то, что в го традиционно а называют б, не мешает а называть а, как традщиционно принято в программированнии в общем.
Michael
т.е. NewTypename из Go вполне соответствует
Michael
фабрика не обязательно возвращает один и тот же конкретный тип
Aleksandr
Mikhail
фабрика - это то, где производят новое, а не возвращают со склада старое
и как же называют тогда собственно метод\функцию, которая возвращает старую сущность со склада?
Mikhail
gc?))
Michael
gc?))
та вроде Банда Четырёх говорит, что an existing object might be reused
Mikhail
object pool
это склад так называется
Vladislav
фабрика - это то, где производят новое, а не возвращают со склада старое
Сейчас уже не припомню в каких, но в книжках по джаве указывали сценарий, когда коннекты к базе переиспользуются, но если свободных нет, они создаются пока не достигнут максимума. Собственно там это тоже называлось вабричными методами.
Vladislav
И так то она производит новое.
Vladislav
Только не всегда.
Aleksandr
ничего страшного
andrew
фабрика и пул - разные паттерны
andrew
https://ru.wikipedia.org/wiki/Порождающие_шаблоны_проектирования
Michael
в описании fabric method банда 4 часто употребляет понятие и слово interface, по хорошему что обозвать гошную NewTypename() *Typename вот этими словами fabric method, она должна возвращать интерфейс, т.к. в ориг книге примеры на С++ , то там используется абстрактный класс
Michael
ещё сами они fabric method называют так virtual constructor
Michael
Если оно крякает как утка, плавает как утка и выглядит как утка - то можно это обозвать конструктором
Roman
конструктор, т.к. конструирует новый объект. а фабрика - это кому то моча ударила в свое время, совсем не нужная абстракция. Массив создаваемых объектов с методом добавления нового - типа вот фабрика
Alexander
Фабрикой обычно называют что-то, что может создавать _разные_ объекты в зависимости от параметров. Эти разные объекты обычно реализуют какой-то общий интерфейс. Например функция СделайГеометрическуюФигуру(тип) может вернуть Квадрат или Прямоугольник. Конструктор же всегда возвращает один строго определенный тип объекта (если возвращает вообще).
Alexander
Это абстрактная фабрика
Ну я бы не стал уже углубляться в различия между фабрикой, фабричным методом и еще какими-то вариациями. Фабрика может быть не абстрактной и возвращать разные типы объектов.
Michael
Это абстрактная фабрика
На 121 странице авторы с тобой не согласны
Aleksandr
gof?
Aleksandr
Всем привет. Задался вопросом, как правильно организовать свой код web приложения или просто программы на Go. Можете посоветовать какую-нибудь литературу, статьи, каналы? Репозитории на Github с примерами Спасибо.
Michael
Посмотри код стандартных пакетов на гитхабе
Aleksandr
Aleksandr
+. Спасибо. Буду изучать и пробовать
Andrew
О, салют)
Gleb
Привет, народ) Только начал копать Go, есть какие-нибудь проекты по транспилированию какого-нибудь расширенного синтаксиса в Go? Нашёл только всякие поделки по типу Go -> JS, не более. Хочется хотя бы классы и прочее OOP плюшки иметь. Не надо мне рассказывать, что и так нормально жить можно. Жить можно как угодно, но DX от такого языка будет достаточно уныл. Сам раньше писал много лет на C++, а потом перескочил в JS и вот как-то не получается из JS-а вырваться. Основной бум скорости развития JS получил с появлением нормального транспайлера в виде Babel и возможности быстро и просто налепить плагин для твоего пропосала в стандарт языка. Что-то мне слабо вериться, что в Go комьюнити такого не напилили. Киданите в меня ссылочкой)
Vladislav
А вообще странно полагать, что сообщество пошло по пути js. Как будто других путей нет.
Gleb
Спасибо, изучу) Понятно, что путей много, просто я не видел ни в одном языке за много лет такого бурного развития и выработки самых лучших решений всем миром. У нас вон огромный кусок в виде статической типизации тем же Flow привнесли, а почти тут жа запилили babel plugin, который транспайлит ваши инструкции "статической" типизации в runtime проверки и ещё и в runtime'е начинает проверять. Если бы такое было в Go комьюнити, то как мне кажется, об отсутвии OOP в Go я бы даже и не услышал.
Заур
js сообществу js приходится воспринимать как данность, от него никуда не уйти
Заур
golang изначально осознанно создавался под конкретные задачи. Зачем же его как-то расширять, если всё, что сочли нужным, уже в него добавили
Заур
есть конечно некоторые вещи, которые в этой группе нельзя называть 😃 , но это надо на уровне компилятора добавлять
Gleb
Самые лучшие решения, ага. Тысячи либ для одной функции.
Я говорю не про либы, я говорю про фичи самого синтаксиса языка. Тот же pipeline operator из Erlang/Elexir/etc " |> " можно внести путём тупого и прямоленейного преобразования в обычный синтаксис вложенного вызова функций. Синтаксический сахар - очень важная штука, которая сильно улучшает читаемость кода. Взгляни на тот же async/await в C#.
Gleb
Но либы вообще тоже, просто их надо в свой проект с умом тянуть, а не закидывать вёдрами всё, что попало. Я у себя в компании постоянно бью по рукам за не нужные либы, равно как и за велосипеды.
Gleb
В рамках ФПшного подхода безумно нужная вещь
Vladislav
А делает то он что?
Vladislav
Отправляет поочередно?
Vladislav
Ух достижение.
Gleb
С добавлением каррирования и частичного применения это очень мощная штука, серьёзно
Gleb
Ну или те же полноценные классы в JS были сначала полностью реализованны путём транспайлинга, а потом уже запиленны в движок.
Gleb
Или те же интерфейсы (First-Class Protocols), пока на этапе рассмотрения, но мы можем это уже использовать, просто транспилируя код в обычный JS.
Gleb
Понимаешь, это примерно как проверка бизнес модели на маленьком кривеньком прототипе, а потом уже запуск нормальной разработки VS долгое и муторное запилинивание того, что не взлетит.
Alexander
Не надо сравнивать JS и Go, т.к. в JS приходится работать с огромным количеством легаси, да еще и зоопарком браузеров. Так что там без транспайлера новые фичи просто не выживут. Их никто не сможет использовать и, соответственно, никто не будет знать.
Alexander
Сама по себе идея транспайлеров, по-моему, нигде кроме JS так активно не используется. Go, кстати, в ранних версиях тоже сначала конвертировался в С++, а потом компилировался обычным gcc. Но, думаю, это как минимум сильно медленее
Alexander
Читаемость кода. Вместо лесенки коллбэков безумной глубины - более-менее удобоваримая структура получается
Vladimir
А что именно улучшает async/await?
очевидно ж - асинхронный код (сарказм)
Gleb
А что именно улучшает async/await?
Ну представь, что ты можешь запустить горутину и тут же на месте дождаться результата её выполнения. При этом у тебя в горутине происходит, допустим, обращение к БД или нечто в этом роде, а стоимость запуска такой вот спецаильной горутины равна нулю.
Alexander
Вот в гошечке этого нет и читаемость кода ок :)
Не могу не согласиться. Поэтому я предпочитаю писать на го, а не js
Gleb
Подождали, пока выполнится первая функция, потом воспользовались её результатом и т.д. Никакого ничетаемого кода)
Gleb
Каналы. Горутина будет просто писать в канал результат
Ага, только будет обвязка кокруг канала с selec'ом и т.д.
Slava
зачем это всё если можно синхронно в корутине? )