Max
Возможно вы и правы, возможно мне и не надо ничего лишнего. Я еще не полностью стандартную либу http изучил. Сходу не нашел как там парсить параметры в урлах, типа /users/{username}. Если это все есть в стандартной либе, то шикарно, мне и ничего больше не надо. Но если самому что-то на регулярках надо будет в урлах писать, то это уже явно перебор. Так же я не понял про сессии. Как мне организовать регистрацию и логин пользователя. Если я могу все это в стандартной библиотеке делать, то шикарно. Пока.я это не увидел в стандартных хендлерах. Но возможно у вас там где-то есть скрытый контекст, возможно там все делается бы.
Max
Но вообще наверное я плохо сформулировал свой первоначальный вопрос.
Max
Лучше спросить так. А как лично ВЫ (действующие Го программисты) решали бы задачу на Го: написать классический веб форум. И очень важный момент -- а использовали ли вы вообще для этого Го? Если я сам начну выбирать библиотеки и фрейсворки и прочее, это я в итоге на Го напишу как в стиле Node.js или мой другой предыдущий опыт с явой или питоном. А я хочу повторить то как это делали бы действующие Го программисты, и понять для себя, а понравился ли мне процесс.
Илья
Возможно вы и правы, возможно мне и не надо ничего лишнего. Я еще не полностью стандартную либу http изучил. Сходу не нашел как там парсить параметры в урлах, типа /users/{username}. Если это все есть в стандартной либе, то шикарно, мне и ничего больше не надо. Но если самому что-то на регулярках надо будет в урлах писать, то это уже явно перебор. Так же я не понял про сессии. Как мне организовать регистрацию и логин пользователя. Если я могу все это в стандартной библиотеке делать, то шикарно. Пока.я это не увидел в стандартных хендлерах. Но возможно у вас там где-то есть скрытый контекст, возможно там все делается бы.
видимо, вам стоит разбить ваш "вопрос" на подвопросы - допустим "/users/{username}" ищется по запросу golang routing их там много разных, gorilla помоему более распростарненная, но есть и более легковесные/удобные, второй ваш вопрос также гуглится golang http session и вроде есть готовые милдвари для этого, так что в чем вопрос я не понимаю
Daniel
Вот да, я уже сижу третий день и ненавижу Го, и не понимаю почему вы все его любите :)
мы - это кто? я go люблю только как тимлид и поддерживальщик чужого кода. как писатель я go не люблю, а просто использую. но - как писатель я никакой язык не люблю. некоторые я ненавижу, правда...
Илья
++ к Александру
Max
под фронтендом вы и сервер-прослойку понимаете? У меня форум классичейкий, никаких SPA (React, Angular, Vue) не нужно.
Aleksandr
под фронтом я имею в виду именно фронт. под сервером сервер апи
Max
ну просто я не понимаю что вы называете "фронтэндом", Некоторые этим называют браузерные скрипты, а некоторые фронтэндом могут называть серверноу прослойку между неким ядром, т.е. в этом случае фронтэнд может быть на Node.js
Alexander
вот щас бы вместо ноды на пхп писать, да.
Alexander
¯\_(ツ)_/¯ ну потому что пхп подходит для уж очень узкого спектра задач ? в отличии от го и той же ноды ? и то что он неплохо подойдет для написания форума, не значит что его надо учить и использовать вместо той же ноды ?
Daniel
современный нам интеренет был создан на php, а не на node. это важно понимать
Alexander
в случае с форумом сначала встанет вопрос А зачем писать своё? и дальше от этого прыгать
Daniel
даже топикстартер не собирается писать свой форум, а просто привел эту задачу в качестве характерной
Max
@onokonem А можно подробное, что бы вы использовали для написания этого классического форума? Пусть это будет PostgreSQL, три таблицы: пользователи, посты и комменты. Из дополнительных требований: - должны писаться логи в файлы, т.е. если какая-то была ошибка, она должна быть записана в файл - должна сессия пользователя сохраняться при перезапуске приложения. Например я у себя в ноде для этого использую редис, а что использовали бы вы? - после перезапуска браузера пользователь должен остаться залогиненым, т.е. храним что-то в куке Использовали ли вы что-то кроме стандартной библиотеки?
Dmitry
тут только драйвера для БД сторонние
Daniel
Форум наследие фидо, там не требуется сверхмощностей. Че там учить, тоже не понятно.
это пока у вас количество одновременно подключенных пользователей не перевалит за 10К. после этого окажется, что они генерируют примерно 100 сообщений в секунду в пиках, и вам надо отсылать миллион сообщений в секунду им всем
Stanislav
@onokonem А можно подробное, что бы вы использовали для написания этого классического форума? Пусть это будет PostgreSQL, три таблицы: пользователи, посты и комменты. Из дополнительных требований: - должны писаться логи в файлы, т.е. если какая-то была ошибка, она должна быть записана в файл - должна сессия пользователя сохраняться при перезапуске приложения. Например я у себя в ноде для этого использую редис, а что использовали бы вы? - после перезапуска браузера пользователь должен остаться залогиненым, т.е. храним что-то в куке Использовали ли вы что-то кроме стандартной библиотеки?
А можно я? Echo + plain JS, без фреймворков. Ну если только CSS-фреймворк какой-нибудь. По архитектуре - фронт и бэк разделять, на JS запилить простенькую логику рендеринга форума и нужных сущностей, бэк - это просто REST с авторизацией по токену, который или в куках, или в localStorage.
Max
Да, именно. У меня просто задачи это примерно как примитивный форум + еще куча разных демонов, которые общаются с другими микросервисами. Как раз я подозреваю, что Го реально хорош для того, чтобы общаться с микросервисами. Это моя боль в Node.js, я никак не могу найти вариант общения микросервисов, который мне понравился бы. И вот в Го у меня надежда на gRPC, что он хорош. И вот я начал для теста писать эту классическую админку для операторов, и понял что что-то не понимаю я радости Го :) А иметь в арсенале много языков я не любитель, так как когда в наличии только один язык, то код пишется практически мышечной памяться. А переключаться между контекстами разных языков это убивает такое автоматическое написание.
Stanislav
не надо server-side рендеринг HTMLа только пилить, с этим точно будет боль)
Anonymous
Да ну. Для чего, кроме веба?
Ну форум - это веб. Или нет?
Alexander
Ну форум - это веб. Или нет?
Я не спорю, широкий круг задач - это веб?
Anonymous
Я не спорю, широкий круг задач - это веб?
Веб бывает разный. Ну онлайн-ОС я, конечно, не представляю на PHP, но платежные шлюзы, шеллы и парсеры - почему бы и нет?)
Max
@onokonem Спасибо! По поводу PostgreSQL вопрос. Как я понял, вы привели пример ОRМ, или я ошибаюсь? У меня просто неприязнь еще с Java / Hibernate от ORM. Вначале с ними все замечательно, а когда проект сложный, то понимаешь, что через год больше времени тратишь на борьбу ОРМ при решении нестандартных задач, чем на бизнес логику. Поэтому я уже очень давно работаю с MongoDB, так как никакие там ORM не нужны, и при смене языка, мои знания не теряются. Как я понял, в го еще нет нормального официального драйвера для монги. Это у меня вторая попытка на Го начать писать. Года два назад как раз мне что-то очень не понравилось в том неофициальном драйвере монги, и я на Го забил. И вот вопрос такой: а возможно ли писать сложные приложения с PostgreSQL с базовыми драйверами, ну или легковесными хелперами обвязками над ними? Т.е. чтобы никакой черной магии ORM типа Hibernate не было.
Roman
https://blog.filippo.io/playing-with-kernel-tls-in-linux-4-13-and-go/
Alexander
работал с тем же gorm и там при желании можно писать на обычном sql и использовать собственно сам gorm только для парсинга данных
Max
Возможно. У меня просто очень древний опыт работы с ORM системами, возможно все в этом мире стало лучше.
Васильев Виктор
@onokonem Спасибо! По поводу PostgreSQL вопрос. Как я понял, вы привели пример ОRМ, или я ошибаюсь? У меня просто неприязнь еще с Java / Hibernate от ORM. Вначале с ними все замечательно, а когда проект сложный, то понимаешь, что через год больше времени тратишь на борьбу ОРМ при решении нестандартных задач, чем на бизнес логику. Поэтому я уже очень давно работаю с MongoDB, так как никакие там ORM не нужны, и при смене языка, мои знания не теряются. Как я понял, в го еще нет нормального официального драйвера для монги. Это у меня вторая попытка на Го начать писать. Года два назад как раз мне что-то очень не понравилось в том неофициальном драйвере монги, и я на Го забил. И вот вопрос такой: а возможно ли писать сложные приложения с PostgreSQL с базовыми драйверами, ну или легковесными хелперами обвязками над ними? Т.е. чтобы никакой черной магии ORM типа Hibernate не было.
Сейчас работаю с монгой на го. Не можете подсказать какие проблемы у драйвера ?
Max
Ну это было года два назад. Я уже точно не помню, но было что-то типа такого, но могу и наврать. У меня был батч инсерт, на много документов. И оказалось, что драйвер имел какие-то лимиты. Типа не мог он больше 10К за раз документов заинсертить, но с цифрами могу врать. И мне нужно было самому делать воркараунд этой проблемы, разбивать мои списки на пачки. Естественно в JS и Java такой проблемы не было, они сами автоматом работали как надо.
Stanislav
@onokonem Спасибо! По поводу PostgreSQL вопрос. Как я понял, вы привели пример ОRМ, или я ошибаюсь? У меня просто неприязнь еще с Java / Hibernate от ORM. Вначале с ними все замечательно, а когда проект сложный, то понимаешь, что через год больше времени тратишь на борьбу ОРМ при решении нестандартных задач, чем на бизнес логику. Поэтому я уже очень давно работаю с MongoDB, так как никакие там ORM не нужны, и при смене языка, мои знания не теряются. Как я понял, в го еще нет нормального официального драйвера для монги. Это у меня вторая попытка на Го начать писать. Года два назад как раз мне что-то очень не понравилось в том неофициальном драйвере монги, и я на Го забил. И вот вопрос такой: а возможно ли писать сложные приложения с PostgreSQL с базовыми драйверами, ну или легковесными хелперами обвязками над ними? Т.е. чтобы никакой черной магии ORM типа Hibernate не было.
jmoiron/sqlx посмотри, понравится точно)
Shahlo
Prevet
V
так там батчем
Васильев Виктор
Так и там не по одному. массивы данных слишком большие чтобы выдавать их по одному
V
кто их знает
V
похоже вот на это https://github.com/go-mgo/mgo/issues/288
V
судя по всему стало получше
hypnopumpia
Доброй ночи, чат. Вопрос касается Го немного косвенно, но за помощь и идеи буду благодарен. Задача стоит такая: нужно написать утилиту создания отчетов, которая бы заполняла шаблоны LibreOffice (выбран чтобы не технические люди могли редактировать шаблоны) данными, получаемыми из постгреса и генерировала файл. Графический интерфейс либры использовать нельзя. Вопросы по этой куче добра: 1) Если бы перед вами стояла такая задача, что бы вы использовали как генератор шаблонов вместо либры (требование - простота интерфейса, чтобы создателю шаблонов не пришлось писать разметку) 2) Если использовать либру, какие возможные пути заполнения файла-шаблона? Пока рассматривал макросы (пока не увидел способа запустить без ГУИ), разархивирование файла-шаблона и изменение xml напрямую (негибкий подход) и использование АПИ либры через Го-обертки (еще не читал доки АПИ, если есть кто-то с опытом - буду рад совету)
Васильев Виктор
судя по всему стало получше
Так это заброшенный драйвер. Сейчас развивается комьюнити
Васильев Виктор
https://github.com/globalsign/mgo
Васильев Виктор
Даже в самой репе той на нее ссылка есть
V
там issue, которая вроде как pr разрезолвлена в этом драйвере. просто сам багрепорт и актуальное состояние проблемы.
Васильев Виктор
А. Окей хорошо :)
Daniel
@onokonem Спасибо! По поводу PostgreSQL вопрос. Как я понял, вы привели пример ОRМ, или я ошибаюсь? У меня просто неприязнь еще с Java / Hibernate от ORM. Вначале с ними все замечательно, а когда проект сложный, то понимаешь, что через год больше времени тратишь на борьбу ОРМ при решении нестандартных задач, чем на бизнес логику. Поэтому я уже очень давно работаю с MongoDB, так как никакие там ORM не нужны, и при смене языка, мои знания не теряются. Как я понял, в го еще нет нормального официального драйвера для монги. Это у меня вторая попытка на Го начать писать. Года два назад как раз мне что-то очень не понравилось в том неофициальном драйвере монги, и я на Го забил. И вот вопрос такой: а возможно ли писать сложные приложения с PostgreSQL с базовыми драйверами, ну или легковесными хелперами обвязками над ними? Т.е. чтобы никакой черной магии ORM типа Hibernate не было.
squirrel не ORM, а генератор запросов. две вещи я из него использую: 1. генератор IN clause по набору параметров неизвестного заранее количества 2. возможность генерить запросы и для постгреса, и для мускула. формат плейсхоллдера разный же про монгу не скажу ничего - я ей не пользуюсь написать сложное на чистом постгресе не сложнее, чем в любом другом языке. но придется или руками, или кодогенератором лепить список параметров для чтения из ответа в переменные.
Max
Спасибо! Попробую на вашем стеке сделать этот тестовый веб форум.
A
это все проверка на стиль мышления. действительно, названия часто используемых вещей (имен пакетов, команд) должны быть краткими, быстро всплывать в памяти не отвлекая от раздумий и быстро набираться на клавиатуре. если ты тугодум и мнешь сиськи по три часа, то да, тяжело понять.
Очередной ответ в стиле "вы просто все тупенькие". :) Мол, всё круто, именовать в одно слово или сокращение можно что угодно. Вот только на практике, проекты (особенно большие) как раз забивают на рекомендации и делают названия в том же snake_case, потому что некоторые вещи ну просто _неадекватно_ называть сокращенно или в одно слово. И, самое главное, для чего сокращать там, где это сказывается на читабельности? Чтобы быть не как все? Сэкономить несколько символов при печати? Слишком сложно читать? Чтобы было по-гошному минималистичное и "крутое" имя? То, что одно слово или аббревиатура/сокращение - далеко не всегда лучший вариант, по-моему, очевидно хотя бы по опыту других языков.
A
БТВ, в docker вынуждены писать местами два полных слова слитно, в нижнем регистре. То же самое в kubernetes. В influxdb забивают и разрезают слова подчеркиванием, чтобы совсем уж дико не смотрелось, в итоге там есть пакеты в snake_case, да (все тупенькие, видимо). За примерами далеко ходить вообще не нужно.
Roman
такие проблемы - да, от тупости и безделия. ну или по молодости.
A
Как и писал в первых сообщениях, буквально во всех подобных обсуждениях обязательно появляется кто-нибудь с "у вас плохая архитектура" или "вы просто тупенькие". Так-то буду только рад, если кто-то объяснит мне сакральный смысл этого. Потому что я явно что-то упускаю. Но ладно я, разные топовые go-проекты, видимо, что-то не так далеют.
A
Вот скажите, docker, kubernetes, influx - тупые бездельники?
A
Почему они не могут уложиться в name convention?
Roman
делом надо заниматься, и называть как удобно
A
Name convention тогда плохой? :)
Vladimir
Инфлюкс плохой пример, они говнари ещё те
A
Просто ведь, казалось бы, соглашения по именам тоже неглупые люди придумывали. Но причины не объясняются. А их было бы очень интересно послушать, учитывая, что это буквально единственный популярный язык, где рекомендуется избегать friendlyPackageName в угоду frpkg, а не наоборот.
Vladimir
Это вполне соотносится с рекомендациями
Roman
как бы ты что не назвал, всегда есть минимум 5% недовольных (а среди программистов 95%), поэтому, забей
A
Да, понятно, что где-то дейтвительно здорово сократить, всё круто-удобно. Но где-то просто нужные два полных слова, хотя бы два. И без camelCase и без snake_case это может выглядеть дико.
A
https://github.com/google/gvisor/tree/master/pkg/atomicbitops https://github.com/kubernetes/kubernetes/tree/master/pkg/securitycontext
A
https://github.com/docker/docker-ce/tree/master/components/engine/restartmanager
Илья
не во флуд ли? это все сторонние проекты, а в самом го как с этим?
Altay unstppbl
О, тёзка @altai256
Denis
это все проверка на стиль мышления. действительно, названия часто используемых вещей (имен пакетов, команд) должны быть краткими, быстро всплывать в памяти не отвлекая от раздумий и быстро набираться на клавиатуре. если ты тугодум и мнешь сиськи по три часа, то да, тяжело понять.
эти все вопросы это не строгие правила, а рекомендации. такие же, как например - покрытие 100% кода тестами хорошо, остальное говнокод. реальных проектов со 100% покрытием практически нет, однако нельзя сказать "мы стремимся к 90%, больше ненужно". или например я считаю любую функцию длиннее 10 строк говнокодом, но это не означает что я буду сидеть и распиливать каждую 11строчную, однако буду держать в голове, что если у меня есть функция в 20 - надо бы зарефакторить, оставить тудушку хотя бы.