Это копия, сохраненная 8 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ВЕЛИЧЕСТВЕННОЕ БЕЗХОМЯЧЬЕ ЛОГО ЭДИШН
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
С чего начать:
- В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)
- Читаем документацию прямо по порядку (пункт "Learning Go"): https://golang.org/doc/
- Ёмкий пошаговый гайд с азов до джуна (go tour на максималках): https://www.practical-go-lessons.com/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)
Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/
- Книги из списка https://github.com/dariubs/GoBooks
Полезные ресурсы:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/
- Смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Обновляемый список с пакетами: https://github.com/avelino/awesome-go
Небольшой канал треда: t.me/golang2ch и даже живой
Предыдущий тред умирает здесь: >>2286748 (OP)
Шаблон шапки: https://pastebin.com/vmWawK2t
Первый нах! Респект го за убийство жабы на бэкенде
Задача простая, хочу написать имплементацию Л2ТП впн сервера не спрашивайте нахуя
Кое как слепил базовый UDP сокет, но пока что у меня проблема даже с тем, чтобы собрать пакет и кинуть его от сервера к клиенту, лол.
Так Goвно же, выбор очевиден.
Да я это прочитал, и RFC прочитал, но нихуя не понял как мне от сервера передать пакет с нужными полями.
Ну делаю я структуру допустим, и что потом...
Дрочи бьерна и хуярь на сишке
ню эра жаваскрипт это раст
> давайте перепишем это на расте (электроне)
> куча ненужных фич
> борешся с борроу чекером (языком 1+'1')
а гошка это ню эра луа
> фич почти нихуя
> фичи какие-то ебанутые (че тут есть только мапа+слайс??/че тут есть только таблица??)
> используется дохуя где но вакух нет
Я написал типичную rest хуйню, у него есть сваггер, ничего удивительного. НО, когда ты приложуху разворачиваешь в разных места, от virtualbox, docker до хостера, то у тебя ip-шник всегда меняется и как сделать так чтобы сваггер знал по какому адресу стучаться(пикрил 2)?
То есть в коде прописан пикрил1 и если я решу развернуть это говно в докере или на ВМ, то мне что, в код нужно лезть и урлы менять?
И вопрос сформулировать сложно, и самому нихрена не понятно.
Умоляю анончики помогите с меня как всегда нихуя
>фич почти нихуя
Какие тебе фичи нужны?
>фичи какие-то ебанутые (че тут есть только мапа+слайс??/че тут есть только таблица??)
Это не фичи.
>используется дохуя где
Например? Почему это дохуя где?
Теперь еще вопрос, как работать с битами в го?
Например в хедере у меня 6 бит под разные аттрибуты, но как их туда расскидывать я хуй знает
А как ими пользоваться анон подскажи пожалуйста.
Пробовал следующий способ
1. У меня есть конфиг файл yml формате где записываются значения, аля порты, подключение к БД и т.д.
2. Туда я добавил урл
3. Импортнул в сваггер как в пикриле1
Получаю ошибку в сваггере, говорит ошибка в парсинге
>Какие тебе фичи нужны?
мне почти нихуя, тех что в гошке достаточно
>Это не фичи.
наличие сетов и всяких структур данных в стандартной библиотеке это как раз фичи, помимо всякого сахара.
>Например? Почему это дохуя где?
бекненд конежно же
Ты можешь сам отдебажить и увидишь что тебе строка отдает. Я бы вообще логирование несенситивных энвов добавил на старт сервиса.
Анончик уважаемый, можешь более человеческим языком разъяснится, студенту пиздет сложно дается твой сленг((
В каналах телеги с тем же вопросом подошел там люди говорят что это не баг а фича
Я туповат и не понял как использвать битовые операции. Помогите пожалуйста, с меня как всегда
Вот к примеру есть у меня байт, состоящий из битов 1 0 1 1 0 0 1 0, эти биты лежат в структуре с типом uint.
Как мне из этого сделать байт, чтобы отправить клиенту сетевым пакетом? В голову приходят всякая поебеть типа сделать строку, ее конвертировать в 16-ричную, а из 16-ричной получить двоичную
При чём тут блять жаба?
Да.
В том, что использование огромного количества памяти это путь жаб. У тебя для 8 битов используется 256/512 бит.
Как выучить го? Он мне не нужен, но хочется знать, так, для прикола.
Когда-то возникнет задача под него, а тут я такой хоба - достаю из широких штанин.
Прям по официальному гайду? Но там только кор, а всякие штуки-дрюки, за что он ценится?
Собственно, го и ценится за примитивность и возможность постоянного написания велосипедов. В языке тупо нет нихуя.
Panic-driven development?
Большинство курсов/книг по Го - тупо пересказ го-тура. Можно его пройти и отдельно что-то почитать про вёбню
Генерики завезли, но с подводными камнями:
https://planetscale.com/blog/generics-can-make-your-go-code-slower
Есть структура, часть полей которой возвращается всегда, а часть по запросу через параметр fields. То есть поля, указанные в fields должны быть добавлены к полям, которые возвращаются по дефолту.
Как это реализовать? Если это как-то нетривиально, возможно у Gin есть какая-то тулза специальная для этого.
Если сформулировать вопрос более обще - как динамически выбирать возвращаемые в виде JSON поля у одной структуры.
(типы примитивные, делать через поинтер + json omitempty как то слишком костыльно кажется)
Может пизда, а может не пизда. В конце концов есть не только Авито с Озоном. А вот твоих проблем это не решит. Попробуй проанализировать, что заставляет тебя тут просираться, хотя вроде бы никто и не просил. Ни отрицаний ни утверждений в этом треде не видел
Раз пизда, то и смысла заходить в этот тред нет. Вот и съеби обратно с свой МВП-загон.
Ну как минимум еще есть вайлдбериз, а еще есть яндекс со своим клаудом.
Плюс всякие отделы сбера, тот же мегамаркет к примеру.
В телеком, в тот же мтс, набирали гошников ранее.
NewSomething(...parameters...) (something, error)
И тут возникает вопрос, как тогда валидировать параметры. С одной стороны кажется логичным вызвать panic, если на вход послали какой-то кал - пусть пользователь функции ебется и читает доку.
С другой стороны из всех щелей лезет, что паника это антипаттерн и ее нужно максимально избегать.
Итого вопрос, норм или не норм паниковать на мусор на входе?
Если не норм, то какие бест-практисы по созданию конструкторов на вход которым нельзя подсунуть мусор. либы по валидации не предлагать
продолжение
Для примера, есть у структуры поле, которое строго не меньше нуля.
Какие есть варианты:
1) поставить uint - и потом везде ебаться с приведениями к человеческому инту и подобным манипуляциям.
2) написать в доке - меньше нуля поставил - сам дурак, держи панику. и поставить обычный инт, потому что работать с ним удобнее.
На какой стул сесть или как вообще принято в Го
Почему сам не могу? Я не ебу, где он сделан хорошо
конструкторы через NewX() классика, если тебе нужно валидировать параметры при создании.
Написал круд говно на ГОвне, есть БД в виде постгреса. Запускаю в docker compose, получаю такую залупу при отправлении запроса.
Пробовал запускать без контейнера, работает. Везде сука работает а в контейнере это говно не работает
Я уже отчаялся не знаю что делать. Мб кто сталкивался с такой паникой((
Прошу вашей помощи
ну выглядит как будто ты сервер без хендлера запускаешь или что-то вроде этого. по панике не видно ни-ху-я. добавь recover в хендлер на случай если оно в хендлере происходит. если не там, то показывай код до listenandserve или аналога.
Тогда давай посмотрим докерфайл, думаю тут ошибка
Анончик смотри, когда запускаешь мое говно, у тебя появляется сообщение о том что ты приконектился к БД. Ещё раз запустил это говно прям на хосте и это сообщение увидел (пикрил 1), притом БД работает в докере.
Потом запустил сервис в докере, сообщение о том что подключился к БД не увидел (пикрил2)
ошибку от коннекта к БД игноришь и у тебя nil БД получается? ну видимо с сетями докеркомпоза ебаться надо. можешь добавить какой-нибудь
networks:
- postgres
и подключаться по имени контейнера вроде postgres://postgres1:5432. или по-тупому network_mode: "host", если у тебя линекс.
Вот так выглядит compose, я создал отдельную есть типа bridge и жестко прописал айпишники, потому что при каждом запуске у тебя айпишники меняются
Недавно слышал, что постгрес в докере тупит и запускается с задержкой. Попробуй организовать реконнекты к базе, либо просто слипнись в мейне на секунд на 10-15
Сейчас так сделаю и отпишусь
Но у тебя теория ломается об то, что сейчас я из compose выкинул сервис.
1. Запустил compose только с БД
2. Чутка подождал и запустил отдельным контейнером с docker run
И не сработало, думаю. Подожди, я сейчас другие варианты попробую и отпишусь
Ну я хз тогда. Попробуй в дебаггере отследить, в какой момент у тебя появляется внезапный nil pointer.
>потому что при каждом запуске у тебя айпишники меняются
ага ну для этого есть роутинг по имени контейнера, как я и сказал
ДААААА БЛЯТЬ САСАМБА ЛАЛКИ
Пошел по твоему совету анончик.
1. Добавил тайм слип
2. Нахуй удалил кастомную сеть из композ файла
3. Добавил depends on, чтобы контейнера последовательно запускались
ДААА БЛЯТЬ наконец починил
P.S. если у тебя есть советы по докеру можешь ими поделится? Ну типа как писать докерфайлы, как композ файлы писать. А то в сети хуета одна попадается
ну тебе лучше подключение к БД в лупе с ретраями сделать, чем завязываться на какое-то количество секунд. обычно вообще драйвер во время sql.Open должен делать какой-нибудь select 1 и возвращать ошибку.
и тут два анончика было. я научил тебя всему по докеркомпозу что я знаю. в продакшене я его нахуй никогда не видел, где я работал везде кубер был.
докерфайлы от места к месту специфичные, где-то мультистейдж билды используются, где-то они чисто для билда используются, а запуски/экспозы за тебя уже придумала команда которая отвечает за автоматизацию деплоев и твой файлик кончается на go build.
для обычного разраба достаточно должно быть знать как написать мультистейдж билд, как установить какой-то пакет в альпайн/дебиан в докере, как запустить курл и скачать файлик во время билда, и как настроить московскую таймзону.
Вопрос стоит в пет проекте (я знаю как эта хуета всех достала),
хочу написать что-то что не будет очередной круд говной, такое я уже написал.
Есть такая идея, написать консольный чатик.
В чем суть:
1. Есть сервер с пользователями
2. Клиент может через терминал подключатся к серверу и переписываться с остальным пользователям.
3. Есть идея очищать чатик беседующих раз в 3-5 мин аля анонимность (прикрепите маску вендетты)
Хочу написать такое говно с целью прокачки скилла
А именно:
1. Вебсокеты. Думаю тут стоит применить вебсокеты
2. CLI. Читал что для этого часто используют го. Да и клиента то нужно как-то реализовать
3. MongoDB. Где то нужно хранить чатик, nosql то что нужно, кажется хотя хз
4. Postgresql. Для хранение юзверей
5. Microservices. Ниибаца какой будет, скорее всего размер будет таким что можно как-то и MQ добавить,
6. RabbitMQ. Смотреть на 5 пункт
7. GrafQL. Можно упороться и взять Grafql
Как вам идея? Что подкорректировать, что выбросить? Пришел к вам за критикой и советами. Был бы признателен если поможете
>Postgresql. Для хранение юзверей (можно и в Монге, не лопнет)
>Microservices.
>RabbitMQ
>GrafQL.
Вообще не понятно зачем. Даже если основная задача, затащить как можно больше технологий, я вот вообще не понимаю какой юз-кейс использования, например графкюэль.
Плюс, думаю, ты делаешь это в том числе для поиска работы. Так у нанимающего возникнет закономерный вопрос, какого хера это все притащил. А если ты на проде такое же разводить начнешь? В общем все решения и зависимости должны быть обоснованными.
>Postgresql. Для хранение юзверей (можно и в Монге, не лопнет)
>Microservices.
>RabbitMQ
>GrafQL.
Ладно, их выкину.
Тогда стек будет следующим:
1. Общаться будут через вебсокет
2. База в качестве Монго
3. Клиент буду писать на на стандартной библиотеке, cobra и тому подобные будут оверхедом
Я ещё исходил из той мысли что реализуя такой проект как чатик, у меня будет возможность обмазаться горутинами и каналами.
>Клиент буду писать на на стандартной библиотеке, cobra и тому подобные будут оверхедом
ты там планируешь через командные аргументы в чатик писать/читать без терминальной графики штоли? это ж неюзабельно и наркомания
хм
Не так выразился.
Просто я скомпилю клиентский бинарник и добавлю пару флажков для настройки клиента. А так это будет реально CLI утилитой которую запускаешь. Вводишь команду по отображению всех пользователей и по нику можешь им написать.
Я просто потыкал кобру и понял что она нужна ну реально на серьезных проектах по типу k6.
У них связь на каких-то анальных рациях из 70-х, звонят по мобилкам или на волонтерских рациях из али, на го они пишут.
Нахуй тебе паниковать? А если у пользователя паника будет недопустимым поведением? Как ты вообще пишешь к выводу что New() smth, error это "треш полный"? Это самый правильный способ, и если валидация не прошла возвращается nil, err
Пиздец ты проблему придумал на ровном месте
И получается, что вместо нормального int в структуре будет *int. Отторжение максимальное.
>>418945
Ну, в общем почитал статьи, улеглось, да, думаю все таки норм. Просто логика была такова, что если New паникует, ты используешь структуру не правильно и не плодишь кучу обработок. То есть явное указание на ошибку программиста. В том числе в стд либа часто любит паниковать, когда используешь ее неправильно. Но в общем ладно, твое мнение тоже принимаю и скорее всего буду делать так
Перед тем, как начать учить язык, хочу спросить советы.
Можете в двух чертах объяснить как, тут принято? Фреймворки есть популярные?
Может кто-то подсказать гит-репозиториев с проектиками?
Может есть тестовые приличные с крудами?
ну обыкновенно. либо поинтеры, либо нулевые значения.
тебе так чешется ноль от нулла отличать?
Если фреймворков нет, то это хорошо даже. Значит экспириенс будет сильно другой.
Ну а как? Наборы маленьких либ? И устоявшихся тоже наверно нет. Можешь написать какие вот ты используешь?
Потому что мин обороны никогда не вводит в эксплуатацию то что им сделали, там на местах слишком тупые кадры + попил лютый, история как с арматой, делают MVP и показывают только на выставке.
мимо
Да не то что бы маленькие, просто не навязывают свою архитектуру. Вообще заметил, что частенько есть general либа, например Gin для вебни и параллельно разрабатываются совместимые либы-модули.
Погуглил gin. Ну это такая средняя по размеру http-библиотека. А для sql есть что-то? Орм вроде не ценится в go? А ActiveRecord? Еще я слышал, что в стандартной библиотеке мало структур данных. Есть что-то по этой теме?
Для sql есть драйверы. Про структуры данных точно не знаю, по-любому есть библиотеки с ними, я если что-то нужно сам пишу
>Про структуры данных точно не знаю, по-любому есть библиотеки с ними, я если что-то нужно сам пишу
Популярный подход для гошки вообще?
Вряд ли, я просто недавно вкатился в го и фриланшу, в компаниях за такое ебут скорее всего
Немного, базовые вообще: множество, дерево поиска, куча. Пока не встречалось задач, где бы использовалось что-то сложнее
Вот есть прод база, которой допустим занимается ДБА или кто-то еще. Сетапит, обновляет, меняет структуру, хз.
Но зачем нужны файлы миграций во многих проектах на Го? Чтобы сетапить тестовую базу? Можно же просто в коде выполнить запрос на создание, затем дропнуть. Или зачем? Вообще не догоняю
И вообще, почему миграции? Что значит это слово в контексте
>Вот есть прод база, которой допустим занимается ДБА или кто-то еще. Сетапит, обновляет, меняет структуру, хз.
это так работает далеко не во всех компаниях. у нас ДБА только обеспечивают разработчиков базой для их сервиса, которая работает, бекапится, у которой стоят нужные лимиты, и консультируют по связанным вопросам, когда нужно.
а завести колонку/индекс/табличку - этим занимаются разработчики.
>Но зачем нужны файлы миграций во многих проектах на Го? Чтобы сетапить тестовую базу? Можно же просто в коде выполнить запрос на создание, затем дропнуть
зачем хранить схему БД в двух местах? есть папка в репе с самим сервисом, которая является единственным источником схемы, всё. не нужно ждать апрувов в две репы, не нужно дергать и ждать ДБА по добавлению одного столбца, которые могут еще ошибиться.
> Вот есть прод база, которой допустим занимается ДБА или кто-то еще. Сетапит, обновляет, меняет структуру, хз.
Это устаревшая тема, сейчас почти везде, где я знаю, этим занимаются сами программисты, а ДБА максимум готовят саму базу (крутят настройки постгресса), оптимизируют сложные случаи и тп. Программисту так-то виднее, что там за бизнес-логика и как под неё положить данные.
Сама миграция - это сложный процесс, который может включать в себя импорт или какую-то обработку данных, оно может происходить в фоне, в несколько шагов и тд и тп.
Это намного сложнее, чем зайти через phpmyadmin на прод и там херануть alter table. Соответственно, миграции тоже сначала программируются и затем тестируются. При этом другие программисты ещё и должны знать, кто и зачем что-то поменял. Да и доступа на прод ни у кого кроме админов как правило нет.
И это как раз то, почему они пишутся в отдельные файлики.
1) таким образом в истории гита видно, кто и зачем что-то сделал;
2) таким образом оно автоматически либо полу-автоматически накатывается на local/dev/stable/preprod/prod при релизах и твоя миграция протестируется с прочим кодом до того, как заломает что-то на проде;
3) таким образом мы получаем набор состояний базы (собственно, файликов с миграциями), между которыми мы базу мигрируем. И мы можем посмотреть, что применилось, а что нет, при применении какого шага что-то пошло не так, откатиться до какой-то конкретной версии;
4) миграции могут зависеть друг от друга, условно, ты создал таблицу, а потом Васян добавил на неё fk, и в тч эту проблему решает версионирование миграций, твоя миграция №5 означает, что перед тем, как накатить её, база обязательно должна накатить 4 предыдущих.
>>419525
Добра тебе за правильный вопрос. В двух словах, в го не приняты фреймворки, как жанр, так как они как правило несут с собой много дополнительного обвеса и зависимостей, а гошники лишние зависимости как правило (и иногда ошибочно) не любят.
Вместо этого принят подход, похожий на unix-way, когда у тебя есть миллион разных библиотек, каждая из которых делает что-то одно. Соответственно, начиная проект, ты берешь любимый роутер, логгер, сервер, клиент для базы, мигратор и тд и тп и собираешь, как из лего, себе систему. Плюсов у такого подхода много, например, ты не платишь за то, что не используешь, но тебе впихнули во фреймворк, легко заменить одну либу на другую и тп. Минусы тоже есть, например, ты не найдешь два проекта, похожих друг на друга, спринга с гибернейтом тут нет. С другой стороны после нескольких лет работы понимаешь, что все библиотеки одинаковые, потому что решают одни и те же задачи и тебе становится просто пофиг. Разве что у некоторых либ апи симпатичнее
Я здесь могу разве что посоветовать ни в коем случае не использовать gorm, и даже не приближаться к нему.
Со структурой проекта та же история, стандартов особо нет кроме https://github.com/golang-standards/project-layout да и тот условный, больше просто про структуру папочек на верхнем уровне, нежели про бизнес структуру кода. У гошников здесь тоже действует такое правило, что типа структурируй так, как будет нужнее для данного конкретного проекта.
Здесь я с ними не согласен, в итоге это приводит к тому, что большинство проектов написанных все же как правило какими-то мудаками, потому что только я знаю, как правильно структурированы как попало и зачастую мешают слои с логикой, херачат все в один файл и всё такое. Короче, всё очень сильно завязано на архитектурные навыки того, кто изначально проект создавал.
Хороших примеров гошных крудов я не видел, может, когда-нибудь, сподоблюсь и свой сделать.
> Вот есть прод база, которой допустим занимается ДБА или кто-то еще. Сетапит, обновляет, меняет структуру, хз.
Это устаревшая тема, сейчас почти везде, где я знаю, этим занимаются сами программисты, а ДБА максимум готовят саму базу (крутят настройки постгресса), оптимизируют сложные случаи и тп. Программисту так-то виднее, что там за бизнес-логика и как под неё положить данные.
Сама миграция - это сложный процесс, который может включать в себя импорт или какую-то обработку данных, оно может происходить в фоне, в несколько шагов и тд и тп.
Это намного сложнее, чем зайти через phpmyadmin на прод и там херануть alter table. Соответственно, миграции тоже сначала программируются и затем тестируются. При этом другие программисты ещё и должны знать, кто и зачем что-то поменял. Да и доступа на прод ни у кого кроме админов как правило нет.
И это как раз то, почему они пишутся в отдельные файлики.
1) таким образом в истории гита видно, кто и зачем что-то сделал;
2) таким образом оно автоматически либо полу-автоматически накатывается на local/dev/stable/preprod/prod при релизах и твоя миграция протестируется с прочим кодом до того, как заломает что-то на проде;
3) таким образом мы получаем набор состояний базы (собственно, файликов с миграциями), между которыми мы базу мигрируем. И мы можем посмотреть, что применилось, а что нет, при применении какого шага что-то пошло не так, откатиться до какой-то конкретной версии;
4) миграции могут зависеть друг от друга, условно, ты создал таблицу, а потом Васян добавил на неё fk, и в тч эту проблему решает версионирование миграций, твоя миграция №5 означает, что перед тем, как накатить её, база обязательно должна накатить 4 предыдущих.
>>419525
Добра тебе за правильный вопрос. В двух словах, в го не приняты фреймворки, как жанр, так как они как правило несут с собой много дополнительного обвеса и зависимостей, а гошники лишние зависимости как правило (и иногда ошибочно) не любят.
Вместо этого принят подход, похожий на unix-way, когда у тебя есть миллион разных библиотек, каждая из которых делает что-то одно. Соответственно, начиная проект, ты берешь любимый роутер, логгер, сервер, клиент для базы, мигратор и тд и тп и собираешь, как из лего, себе систему. Плюсов у такого подхода много, например, ты не платишь за то, что не используешь, но тебе впихнули во фреймворк, легко заменить одну либу на другую и тп. Минусы тоже есть, например, ты не найдешь два проекта, похожих друг на друга, спринга с гибернейтом тут нет. С другой стороны после нескольких лет работы понимаешь, что все библиотеки одинаковые, потому что решают одни и те же задачи и тебе становится просто пофиг. Разве что у некоторых либ апи симпатичнее
Я здесь могу разве что посоветовать ни в коем случае не использовать gorm, и даже не приближаться к нему.
Со структурой проекта та же история, стандартов особо нет кроме https://github.com/golang-standards/project-layout да и тот условный, больше просто про структуру папочек на верхнем уровне, нежели про бизнес структуру кода. У гошников здесь тоже действует такое правило, что типа структурируй так, как будет нужнее для данного конкретного проекта.
Здесь я с ними не согласен, в итоге это приводит к тому, что большинство проектов написанных все же как правило какими-то мудаками, потому что только я знаю, как правильно структурированы как попало и зачастую мешают слои с логикой, херачат все в один файл и всё такое. Короче, всё очень сильно завязано на архитектурные навыки того, кто изначально проект создавал.
Хороших примеров гошных крудов я не видел, может, когда-нибудь, сподоблюсь и свой сделать.
>ты берешь любимый роутер, логгер, сервер, клиент для базы, мигратор и тд и тп и собираешь, как из лего, себе систему
Спасибо за ответ. В авесом-го репе уж слишком много всего. Можно конечно тупо под каждый тип либ по наибольшим звездочкам выбрать, но это такое. Можешь перечислить какие-то либы, с которыми лично ты работал и с ними не было диких проблем?
ИМХО Standart Project Layout говно какое-то. Медитирую на эти, что скажешь?
https://github.com/ThreeDotsLabs/wild-workouts-go-ddd-example
https://github.com/evrone/go-clean-template
мимо другой анон
Gin/Gorilla - http server/router
Logrus/Zap - logging
Pgx - коннектор к постгесу
migrate/goose - миграции
squirrel - query builder
Мимо другой анон >>421307 всё в целом правильно сказал, разве что в качестве сервера мне почему-то echo чуть больше нравится.
Ещё я вместо squirrel как-то юзал https://github.com/volatiletech/sqlboiler, было тоже норм.
>>421300
Он просто совсем про другое.
https://github.com/ThreeDotsLabs/wild-workouts-go-ddd-example что-то пиздец переусложнен
https://github.com/evrone/go-clean-template только хотел сказать, что норм, а потом увидел, что в usecase у него постгерсовый репозиторий встроен. Нельзя так делать, фу.
Такой вариант, наверное, не подойдет:
type Server struct {
...
__DefaultCtx context.Context
...
}
Поскольку при инициализации структуры, если это таймаут сразу отработает и сдохнет.
На ум приходит только такой вариант с функцией-генератором контекста, которую передает в структуру пользователь:
type Server struct {
...
__DefaultContext() func()(context.Context)
...
}
и уже в хендлерах он генерится, например при запросе к базе
res, err := db.Exec(server.DefaultContext(), "some shit")
Подскажите, насколько норм это решение. Применяется ли где-то (я не видел)? Какие бест практисы для этого кейса? Хардкодить же не норм?
с какой целью интересуешься?
для таймаутов у сервера уже есть свои настройки таймаутов.
если нужны withvalue или все таки хочешь выебнуться с таймаутами, то делай мидлвару и подменяй реквестовский контекст.
r = r.WithContext(wrapcontext(r.Context()))
next.ServeHTTP(w, r)
с твоим server.DefaultContext() ты теряешь контекст от реквеста и, соответственно, не отреагируешь, если реквест отменится раньше, чем твой таймаут кончится или всё кончится.
ну и написать ctx, cancel := context.WithTimeout(ctx, s.Timeout) это не хардкод.
Ну такое, в целом пойдет, но лучше вынести это в миддлварь.
Соответственно при конфигурировании роутера у тебя будет
s := NewRouter()
s = s.WithMiddleware(
WithTimeout(time.Minute) // Твой кастомный миддлварь
)
s.Route("/hello", func() {})
api := s.Group("/api")
api = api.WithMiddleware(
WithTimeout(time.Second) // Сможешь конфигать конкретные роуты или подгруппы роутов
)
Посмотри документацию на свой роутер, полюбому такой миддлварь должен входить в стандартный набор. Вот к примеру для эхо: https://echo.labstack.com/middleware/timeout/
Ну и конечно учитывай, что теоретически на уровне пакета net можно настраивать таймаут самого соединения твоего сервера, что как бы то же самое, но по-другому.
намёк на то, что гофмт решает большинство доёбов на код? То есть, если на го написано, то автоматически богокод и смотреть не стоит, чтобы не ослепнуть от сияния?
Раст тоже хороший язык. Они с го просто решают разные задачи. А ещё на расте хрен найдешь работу, а на го вполне можно.
да не, не особо. у нас например явно заявлено, что код ревью с замечаниями, которые может отловить линтер - это хуевое код ревью. да и в реальности ни в какую серьезную контору с любым языком не наймут парнишек, которые не знают что такое автоформаттер
Тем не менее, гошный gofmt это топ хотя бы потому, что снижает когнитивную сложность. В отличие от всяких там js где каждый пишет как хочет и где есть много конкурирующих стандартов, в го такой один.
Если после gofmt -w ./... что-то изменилось, значит код надо править и такой код даже до ревью доходить не должен.
В итоге, весь код на го, на всех проектах, во всем мире, написан одинаково. Принцип наименьшего удивления срабатывает и действительно становится комфортнее.
Жаль, что деды, стоящие у руля го, остановились на этом, могли бы стандартизировать интерфейсы роутеров, затащить в стдлиб аналог лодаша, чтобы на каждом проекте свои велосипеды не писали, и тд и тпю
Деды не осилили бы сделать всё общо и при этом понятно. Создание фреймворка-стандарта индустрии отдано сообществу. И в нём они прорастают
Никаких фреймворков-стандартов в го нет и не будет. Единственный способ, как бы это могло прорасти - быть спущенным сверху, как это произошло с кодстайлом, го модулями и тд и тп.
И скудный стдлиб обещает нам очень, очень много велосипедов, да.
Растоблядь, съеби уже. Твоё говно не взлетит.
> на расте хрен найдешь работу, а на го вполне можно
С такой-то логикой тебе на пхп или 1с надо перекатываться. Вообще чем дерьмовее язык, тем проще на нём найти работу, так что аргумент не в пользу goвна
Но вот увидел Fyne у Go, выглядит прикольно, думаю почему бы не попробовать. Но есть важный момент, в Fyne интерфейс пишется вслепую, кодом? Или можно как в том же шарпе или QT в идешке задавать общий вид гуишки через редактор?
И да, в Go можно нормально с изображениями работать?
Думаю выучить ваш язык заодно, выглядит интересно. Какой книжкой обмазаться для людей, имеющих опыт программирования?
Да нет годных продвинутых книг по Го, по крайней мере я не видел. Пикрил можно полистать, но это на уровне чтения доки - все примеры в мейне, что расстроило.
Гугли отдельные статьи по интересующим темам, по основам языка можно Го-тур пройти.
сейм анон
Для меня проблема с Го в том, что нет single source of truth. Мне приходится читать кучу статей, смотреть множество примеров, чтобы начались зачатки понимания и интуицияотносительно того, как следует на нем писать. При этом у всех свои подходы и приходится самому анализировать и отделять зерна от плевел. Но я не опытный, возможно у тебя пойдет проще.
А с твоей черно-белой максималистской логикой тебе в школу, к подросткам.
Да, wordpress, реакт и говно на java 8 - наверное самые популярные вакансии, и да, есть такая закономерность, что чем что-то популярнее, тем больше оно рассчитано "на тупых". Но это не означает, что критерием востребованности вообще не стоит оперировать. Только недавно в твиттере видел треды чувака, как он пытался найти работу на расте, спойлер - нихера почти нет, это язык больше для пет проектов пока что. За рубежом ещё можно найти крупные конторы типа mozilla или dropbox, которые что-то на нём делают, а в снг точно с этим сложно.
Соответственно, если язык тебе нужен не программировать в своё удовольствие, то ты должен комфортностью языка лично для тебя, да, но при этом ещё и помнить про свою востребованность на рынке. Если твой язык используют 3.5 конторы на всю страну к примеру, то не так-то легко будет найти работу если вдруг уволят с первого места работы. Да и с зп будут проблемы.
У меня 7/10 собесов заказчиваются ничем, но не потому что я такой плохой, а потому что целенаправленно ищу хорошие офферы за 500 к рублей/мес перешагнул довольно давно. На маленьком рынке труда такое невозможно в принципе, выше среднего платит в лучшем случае одна контора из десяти, а их всего десять, лол.
Я бы го для такого не рекомендовал. Не знаю, насколько хорош Fyne, но юзабельность пакета зависит от числа разработчиков, числа пользователей и времени его существования.
Очень сомневаюсь, что база хотя бы пользователей сопоставима с любым gui-фреймворком той же джавы. А это означает баги, отсутствие или неполную документацию, отстуствие или малое число гайдов и тд и тп.
Короче, может быть норм, а может, напляшешься и наприседаешься. Но если готов к этому, то бери конечно, может быть интересный опыт.
А если ты хочешь прям сделать приложуху, то есть минимум боли и максимум результата, то лучше взял бы что-то из C#/Java/QT, смотря что знаешь. На кроссплатформенность можешь кстати наплевать, у линуксоидов вайн есть и вообще им так даже больше нравится сделают уебищный но зато опенсорсный порт на GTK как обычно.
Или, неиронично, возьми электрон. Да говно, да много весит, да во рту вкус говна - но зато хуяк хуяк и готово. JS ты полюбому знаешь.
>>422484
Я считаю себя опытным, но вообще same shit, большая часть контента на го - helloworld'ы сомнительного качество, придется разбираться во всем самому
Пока на Го больше вакух чем на сисярпе (в ДС2 150 по первому и 50 по второму). Вот второму, кстати, реально пиздища - Майкрософт полностью сматывает удочки и никому там неинтересно что начиная с дотнет кора шарп заводится где угодно и совсем не обязательно использовать MSSQL и WinServer.
Судьба оставшихся шарпомистов незавидна - они будут педалить унылое устаревшее легаси до пенсии которой не будет.
Пиздеж фанбоя goвна
а что с Авито? вроде бы набирают людей на говно и дальше/
Странно, в дс "golang":600 "C# OR .NET": 2000
Жалко, что Core заопенсорсили, а то могли бы удаленно избавить РФ от своей параши.
А потом goвноед проснулся и заплакал
>а вот у этого языка вакух больше
>нет вот у этого больше
вы безработные штоли? зачем вам эти галеры?
Пишу на жабе большую часть времени.
>Как вам Го
Смешанные впечатления. Радует то, что код в большинстве проектов достаточно прозрачен, без всякой магии под капотом.
С другой стороны в языке какой-то убогий синтаксис, и много чего полезного нет в стандартной библиотеке. Тех же коллекций, например.
Видимо это из-за отсутсвия дженериков проявляется.
Ну и еще очень сильно не хватает функциональных фишек уровня стримов в жабе. Очень сильно не хватает.
есть такой вид людей - любители архитектурить. часто такие приходят в гошку из шарпов и жавы и пытаются писать на гошке, как на своем говне. если в тексте есть слово ДДД, то с вероятностью 99% где-то рядом при написании присутствовал этот человек.
их ещё в начале 00х раскусили https://www.joelonsoftware.com/2001/04/21/dont-let-architecture-astronauts-scare-you/
Бля, охуенная статья. Непстер, соап, хмл, смуззихлебский дотнет.
Я тот шиз, который срёт "надо все ЯП ранжировать по количеству вакансий, в тот, где больше всех вакансий вкатиться реально, во все остальные - нереально".
> Ну и еще очень сильно не хватает функциональных фишек уровня стримов в жабе. Очень сильно не хватает.
Мне тоже, но тут можно только смириться. Аудитория гошников на большой процент состоит то ли из сишников, то ли из каких-то очень странных людей, которые вот прям любят процедурный стиль и вот это всё. А ещё дико дрочат на перфоманс и скорость компиляции в ущерб всему остальному, поэтому и функциональщина им не нравится (потому что оверхед), и умный компилятор, который бы сам раскрывал всю эту функциональную дичь не хотят. Такой, не знаю, то ли нигилизм, то ли луддизм.
При этом сама философия го мне нравится, и действительно работая с функциональным кодом на джаве/котлине, написанном теми же мобильщиками, я иногда просто охуеваю от того, сколько ненужных телодвижений и приседаний они делают, чтобы написать функционально или "красиво" в их понимании. Ну знаете этот прикол, когда ты вместо мутации одного объекта, который точно за пределы функции не выйдет и не изменится, вы создадите 10 его иммутабельных копий, позасираете оперативку и всё такое, надеясь на то, что "гц быстрый, справится", хотя можно было бы его просто не нагружать. В общем есть некое здравое зерно в гошной философии, просто на языке пишет куча долбоебов ситхов, которые всё возводят в абсолют и отрицают вообще любой синтаксический сахар и хотят только одного, старый-добрый си, но с гц, видимо, го 1.13 их идеал и лучше для них уже не будет :)
>>425466
Вот только как правило когда заходишь в код тех, кто громче всего кричит про то, что "архитектура не нужна", в итоге кровь из глаз течет, все перемешано, нихуя не понятно и не разобрать, сайд эффекты во все поля и нигде нет блять элементарной логики.
Архитектура не просто так придумана, все броские термины типа DDD это конечно смузи, но смысл-то у них правильный: структурируй, сука, логику, которую ты пишешь, чтобы потом не охуеть. Всё, вся архитектура ровно об этом.
Каждая вещь в коде должна делать одно своё дело, понятное, и
четко очерченное и по минимуму затрагивать остальные вещи. Тогда при большом количестве кода ты не загнешься от каловых наслоений и лапши, и чей-нибудь говнокод будет проще локализовать и выбросить.
Иногда для этого приходится делать лишние телодвижения, какие-то интерфейсы подсовывать, да. Это называется "работа на вырост", при постройке здания тоже знаешь-ли котлован приходится рыть, фундамент заливать и всё такое.
Тут не надо давать себя обмануть, есть целая куча говнокодеров, которые хуячат паттерны не понимая, что это и зачем надо, джава например этим проклята, в итоге у них получаются фабрики фабрик фабрик и это тоже пиздец. Но это не имеет отношения к архитектуре и не делает сами по себе паттерны они же тупо приемы структурирования кода хуже, просто люди делают хуйню. Бывает.
> Ну и еще очень сильно не хватает функциональных фишек уровня стримов в жабе. Очень сильно не хватает.
Мне тоже, но тут можно только смириться. Аудитория гошников на большой процент состоит то ли из сишников, то ли из каких-то очень странных людей, которые вот прям любят процедурный стиль и вот это всё. А ещё дико дрочат на перфоманс и скорость компиляции в ущерб всему остальному, поэтому и функциональщина им не нравится (потому что оверхед), и умный компилятор, который бы сам раскрывал всю эту функциональную дичь не хотят. Такой, не знаю, то ли нигилизм, то ли луддизм.
При этом сама философия го мне нравится, и действительно работая с функциональным кодом на джаве/котлине, написанном теми же мобильщиками, я иногда просто охуеваю от того, сколько ненужных телодвижений и приседаний они делают, чтобы написать функционально или "красиво" в их понимании. Ну знаете этот прикол, когда ты вместо мутации одного объекта, который точно за пределы функции не выйдет и не изменится, вы создадите 10 его иммутабельных копий, позасираете оперативку и всё такое, надеясь на то, что "гц быстрый, справится", хотя можно было бы его просто не нагружать. В общем есть некое здравое зерно в гошной философии, просто на языке пишет куча долбоебов ситхов, которые всё возводят в абсолют и отрицают вообще любой синтаксический сахар и хотят только одного, старый-добрый си, но с гц, видимо, го 1.13 их идеал и лучше для них уже не будет :)
>>425466
Вот только как правило когда заходишь в код тех, кто громче всего кричит про то, что "архитектура не нужна", в итоге кровь из глаз течет, все перемешано, нихуя не понятно и не разобрать, сайд эффекты во все поля и нигде нет блять элементарной логики.
Архитектура не просто так придумана, все броские термины типа DDD это конечно смузи, но смысл-то у них правильный: структурируй, сука, логику, которую ты пишешь, чтобы потом не охуеть. Всё, вся архитектура ровно об этом.
Каждая вещь в коде должна делать одно своё дело, понятное, и
четко очерченное и по минимуму затрагивать остальные вещи. Тогда при большом количестве кода ты не загнешься от каловых наслоений и лапши, и чей-нибудь говнокод будет проще локализовать и выбросить.
Иногда для этого приходится делать лишние телодвижения, какие-то интерфейсы подсовывать, да. Это называется "работа на вырост", при постройке здания тоже знаешь-ли котлован приходится рыть, фундамент заливать и всё такое.
Тут не надо давать себя обмануть, есть целая куча говнокодеров, которые хуячат паттерны не понимая, что это и зачем надо, джава например этим проклята, в итоге у них получаются фабрики фабрик фабрик и это тоже пиздец. Но это не имеет отношения к архитектуре и не делает сами по себе паттерны они же тупо приемы структурирования кода хуже, просто люди делают хуйню. Бывает.
Компания, где всего несколько го-команд и много жавистов. Как бы про жава командам попродавать гошку, чтобы она зашла
Вот вообще не факт, это очень разные языки. Попробуй продать тем же гошникам джаву и увидишь ответ.
Каждый пишет на том, что хочет, тем более, что если у вас там прям хорошо приготовленная джава, в том числе архитектурно что конечно редкость, скорее всего говнокод, то именно процесс кодирования на ней будет сильно комфортнее. Банально IDE развитее, код почти не пишешь, всё автодополняется, подсвечивается, выводится на лету и тд и тп. Куча хелперов, стдлиб богаче, стримы есть. Дебаггер опять же лучше и комфортнее. Короче, нереально.
Джависты приходят в го обычно, когда их задалбливает магия, десять слоев на пустом месте и вот это всё, но такое с опытом приходит и "продать" такое нельзя конечно.
Тому же бизнесу го и то продавать выгоднее, банально дешевле косты. Один сервис на джава у вас скорее всего жрет столько же денег на инфру, сколько все сервисы на го, вместе взятые. А оперативка конечно дешевая, но если поставить вопрос так, что хотим ли мы платить за десять серверов или только за один, то ответ может быть интересным.
так го же лучший язык на рынке для веба
как можно смотреть как люди страдают от жырных полных xmlя и дичайшей магии спрингов?
их надо спасти
Не пытайся наебать, здесь все знают, как это работает.
Знакомый заказывал у одной веб-студии сайт-визитку с каталогом продуктов, так те настаивали на том, чтобы сделать проект с современными подходами, модными технологиями, микросервисами и предложили ценник в полмиллиона и полгода работы.
ну так там развод на баблосекс очевидный, для сайта визитки 3-4 микросервиса максимум, хотя мб там чел ёбу хотел какую-то с парсингом и нейронками
>Один сервис на джава у вас скорее всего жрет столько же денег на инфру, сколько все сервисы на го, вместе взятые
Го настолько легковесный?
> Го настолько легковесный?
минимум накладных расходов, вся используемая память перед глазами
> Знакомый заказывал у одной веб-студии сайт-визитку с каталогом продуктов, так те настаивали на том, чтобы сделать проект с современными подходами
Это на самом деле имеет смысл. Сейчас переписываю старую систему на гошку, а почему? Потому что тогда сделали все по бырику, а сейчас на это говно не смогли найти спецов, нет их. Перепиливаем на модном, потому что оно будет модным еще долго.
> для сайта визитки вообще сервисы не нужны, это блять визитка. Раздавайте тупо статику, можно даже серверлесс.
Я лучше пофиксил
ты забыл отметить, насколько го хорош для серверлесс, учитывая aot компиляцию, мгновенный старт, экономное потребление памяти, высокую производительностьН легкость написания кода и тп
Один сайт - это и есть один сервис.
Нахуй серверлесс в визитке, там достаточно ебучего скрипта на пхп на 200 строчек, либо взять CMS, тогда строчек будет 0.
пахнет нулевыми, деда.
визитка это
- либо nocode-решение
- либо jam-stack, если контент побольшей части статический
- либо серверлесс, если есть много динамический элементов, вроде многоруких бандитов или какой-то функциональности
Нулевыми это пахнет только для тех, кто хочет наебать и вытрясти побольше деняк с клиента. А CMS - это и есть nocode-решение, и потребность в этом говне не пропадёт никогда, потому что быстро и дёшево. Даже если переписать CMS с пхп на го.
Никогда такого не было - и вот опять.
нет cms - это жопа, которая будет доить клиента разными проблемами
под nocode я имел ввиду saas решение, если это одноразовая штука с понятными требованиями, под которые есть готовые фичи у saas решения
иначе лучше пилить свое, выйдет не сильно дороже, зато кастомизируемо
Не будет. CMS - решение, проверенное временем, в отличие от твоего saas, который создаёт больше проблем, чем решает.
кто тебя выпустил из пыха-треда? сидите в своем загончике, утопая в дерьме
не надо мне рассказывать, какие ваши вп и битриксы беспроблемные, вас уже все раскусили и готовы платить или за саас или за заказную разработку
даж в ридми карбона написано, что если можете использовать современный язык, вроде го, то используйте его
карбон для легаси, где нужна тесная интеграция с плюсами, но нервов на плюсы уже не осталось
Всем похуй на бизнес и что ему дорого/дешево, это его проблемы. Уважающий себя человек не станет работать с твоим CMS, лучше уж пойти вагоны разгрузить. Ребята тут за идею ебашут.
Когда ты решаешь свою задачу с помощью CMS - ты просто меняешь время своей жизни на деньги. Причем не очень большие. Если ты за чужой счет затягиваешь оверхэд технологии, просто потому что так интереснее/можно обкатать на котятах новую технологию, чтобы перейти к более стоящим вещам - маладца.
> Всем похуй на бизнес и что ему дорого/дешево, это его проблемы.
И, как следствие, проблемы клиента. Клиент пойдёт за визиткой туда, где дешевле, а не где ему будут ебать мозг, чтобы анальникам было интереснее юзать новые технологии.
> Уважающий себя человек не станет работать с твоим CMS, лучше уж пойти вагоны разгрузить.
Тяжёлый физический труд зимой в хуёвую погоду за копейки vs аутировать в офисе и заниматься лёгкой работой клепания сайтиков на CMS. Тяжёлый выбор, конечно.
ты, senior bitrix developer, ну тебе же уже объяснили, что когда клиенты наелись говна с тобой, кстати, платя тебе копейки, они приходят к нам за нормальным решением
и опять же, спасибо тебе, готовы платить нормальные бабки
да лан вам, флаттер более чем вытсрелил
> они приходят к нам за нормальным решением
И получают ещё больше говна дороже. Затем возвращаются обратно.
>Тяжёлый выбор, конечно.
На самом деле не так очевидно.
>Тяжёлый физический труд зимой в хуёвую погоду за копейки
Пробудит у тебя глубинные экзистенциальные вопросы, найдя ответы на которые, ты сможешь осмысленно и фундаментально изменить свою жизнь
>аутировать в офисе и заниматься лёгкой работой клепания сайтиков на CMS
Эта же ветка приведет лишь к разочарованию, осознанию своего ничтожества, в перерывах, когда непрерывный бренфог рассеивается, например во время отпуска. Только импульса менять статус кво не будет, потому что ты уже потерян
База.
мимо из пхп треда
Долбоеб детектед. Ну какая блять CMS для визитки? O_O
Там контента-то нет, тебе нужно просто раздать статику и всё.
Я когда говорил про серверлесс как раз и имел ввиду, что тебе даже свой сервер не нужен, залей верстку визитки на любой хостинг, который умеет этот html показывать и всё. Можно даже на cloudflare кстати.
>>426742
Кстати гугл на го не пишет. У гугла половина на джаве, половина на плюсах. Ну то есть как у любой суперкрупной конторы у них есть всё на всех языках но написания на го, как корпоративной политики у них нет, в отличие от жавы и плюсов.
А и ещё на го у них там знатный говнокод, по рассказам людей оттуда.
Это я не к тому, что го плохой, а к тому, что "язык от гугла(тм)" это какой-то всратый маркетинг и баззворд, не ведитесь на него. Гугл его в лучшем случае спонирует, как и много других языков и технологий, но не больше.
Визитка - это общее название. Как правило, нужны ещё каталог товаров, пара форм и почта. Ради лендинга из одной страницы никто даже обращаться в веб-студии не станет и возьмёт какой-нибудь говноконструктор.
Почта заводится на любом гугле, там даже домен свой прикрутить можно. Пара форм тоже при сабмите отправляют инфу в ту же почту. Каталог товаров это та же статика и отлично умещается на ту же страницу.
Всё ещё ни cms ни свой хостинг не нужны.
Так на пике 1 ты только создал запрос, но не отправил его, откуда респонсу взяться?
ебать я тупой, реально
Если всё делать так примитивно, как ты описываешь, то вообще никому сайты не нужны, достаточно во вконтактике создать паблик и постить там эксельки с базами, хотя любая CMS с этим справится намного лучше. Это всё твои попытки наебать, типа либо клиенту вообще ничего не нужно, либо саас серверлесс микросервисы за стотыщмильёнов, которые обычному клиенту нахуй не сдались, они для энтерпрайза.
Короче у меня апишка такая:
1. Посылается POST на 1 эндпоинт
2. Сервис посылает запрос на другой эндпоинт методом POST
И тут я ловлю 307 статус код. Чё с этим делать вообще?
Это называется не "примитивно", а "не усложнять, пока не надо будет". Твои CMSки это и есть попытки наебать, их нужно поддерживать, обновлять, и тд и тп. Как из пушки по воробьям.
Вот когда у клиента появится личный кабинет, корзина, доставка, список продуктов, региональные цены, ревизии и всё такое, тогда я и предложу ему shopify as a service, потому что клиенту надо, чтобы работало за минимальные ресурсы, а не чтобы ему универсально всратые комбайны на сервер ставили, лол.
Большинству сайтов на том же вордпрессе вордпресс и не нужен, хватило бы любого онлайн хостинга страничек и темы, которую туда можно натянуть, можно своей. Мало у кого реально есть столько контента, чтобы возникала нужда в системе, чтобы им управлять.
Ты этого пока не понимаешь, и тебе нравится делать сложно и совать везде комбайны, потому что нравится ощущение мощи под капотом. Это нормально, но если будешь развиваться, то с годами пройдет и ты научишься ценить простоту решений. Если можно захостить какую-то херню из эксельки, то проще сделать из эксельки, чем городить огород ради огорода. Усложнять можно всегда и до бесконечности, но делать это нужно только тогда, когда без этого не обойтись, а тут нужен опыт.
Thrust me, я на заре своей карьеры несколько лет потратил на разработку "на cms" (тогда это было ещё модно), знаю о чём говорю.
А там хуйня в location, в итоге редирект по тому же пути и также 307, проблема была в пути роутера, он редиректит, если путь не заканчивается слешем.
Аноны, прошу совета у знающих людей
Как лучше всего делать запрос через время определенное? То есть например, нужно чтобы через 2 часа произошел какой-то прикол, когда тебе на эндпоинт приходит запрос. Просто слипнуть или горутину сделать никак, потому что ты не сможешь отправить ответ (нужно ждать 2 часа). В итоге я почитал про очередь запросов и выкакал что-то типа такого: https://gist.github.com/elegantcookie/9aeb3de3e390d8e702ba56938a0f6624
То есть у нас есть очередь запросов и когда туда приходит запрос, он добавляется в очередь и там происходит бизнес логика. Но мне чето не сильно нравится этот варик, мб можете подсказать что-то дельное или пример такой штуки привести?
Двачую, тоже люто проиграл с этого
пишешь в какой-нибудь пульсар отложенное сообщение.
либо в БД сохраняешь джобу и своим обработчиком достаеш.
в памяти сервиса хранить это такое себе
На этот раз достаточно тривиальное от Авито, сабж:
https://github.com/avito-tech/tm-backend-trainee
Если в кратце, в БД кладем структуру с опциональными полями, возвращаем ту же структуру с доп вычислениями на основе опциональных полей.
Собственно для реализации опциональных полей определил такую структуру на вход:
type AdStats struct {
// input
Date time.Time `json:"date,omitempty"`
Views &int `json:"views,omitempty"`
Clicks &int `json:"clicks,omitempty"`
Cost &float64 `json:"cost,omitempty"`
}
И такую на вывод:
type AdStatsCalculated struct {
Date time.Time `json:"date,omitempty"`
Views &int `json:"views,omitempty"`
Clicks &int `json:"clicks,omitempty"`
Cost &float64 `json:"cost,omitempty"`
Cpc &float64 `json:"cpc,omitempty"`
Cpm &float64 `json:"cpm,omitempty"`
}
(вместо звездочки написал амперсанд, что бы двач не форматировал).
Вроде решение простое и в лоб, но все таки меня смущает такое обилие поинтеров. Естественно все проверки
Поскольку логика тривиальная по сути везде юзаю эти ДТОшки.
Насколько вообще норм такой подход. Нужно ли уходить от пойнтеров или такое решение оправдано? Если нужно, как можно альтернативно реализовать такую функциональность?
На этот раз достаточно тривиальное от Авито, сабж:
https://github.com/avito-tech/tm-backend-trainee
Если в кратце, в БД кладем структуру с опциональными полями, возвращаем ту же структуру с доп вычислениями на основе опциональных полей.
Собственно для реализации опциональных полей определил такую структуру на вход:
type AdStats struct {
// input
Date time.Time `json:"date,omitempty"`
Views &int `json:"views,omitempty"`
Clicks &int `json:"clicks,omitempty"`
Cost &float64 `json:"cost,omitempty"`
}
И такую на вывод:
type AdStatsCalculated struct {
Date time.Time `json:"date,omitempty"`
Views &int `json:"views,omitempty"`
Clicks &int `json:"clicks,omitempty"`
Cost &float64 `json:"cost,omitempty"`
Cpc &float64 `json:"cpc,omitempty"`
Cpm &float64 `json:"cpm,omitempty"`
}
(вместо звездочки написал амперсанд, что бы двач не форматировал).
Вроде решение простое и в лоб, но все таки меня смущает такое обилие поинтеров. Естественно все проверки
Поскольку логика тривиальная по сути везде юзаю эти ДТОшки.
Насколько вообще норм такой подход. Нужно ли уходить от пойнтеров или такое решение оправдано? Если нужно, как можно альтернативно реализовать такую функциональность?
Ну кароче я переделал, вот так должно быть норм, вроде и проц не грузит сильно
Во первых твои две структуры отличаются только наличием и отсутствием значений, как я понял, так что возможно проще их слепить в одну, пусть будет AdStats, а calculated оно или нет будет понятно из контекста (в смысле заполнены у него поля или нет). Твой вариант в целом тоже норм, но возможно немного overcomplicated.
Теперь к сути вопроса. В го есть несколько вариантов работы с отсутствующими значениями (они же null в других языках):
1) Это zero-значения, то есть 0 для инта и так далее. Это прикольно с точки зрения производительности, но иногда абсолютно непонятно в моменте, там 0 потому что нет значения или потому что дефолт? Короче иногда норм, а иногда прям больно;
2) Это поинтеры, то есть по сути nullable значение. Плюс в том, что nil c &0 ты никак не перепутаешь, минус - это нагрузка на гц, да. Но можешь мне поверить, от одного (или даже 10, или 100) поинтера пер запрос го ничего не будет, гц вполне неплохо справляется с большими (но не сверх-большими) объемами указателей, это не должно тебя прям пугать. Так что за этим нужно следить и в узких местах оптимизировать, но в общем случае это вполне себе решение, я почти везде именно его использовал до недавнего времени;
3) Это такой недо-optional, например NullString из стандартной библиотеки. Грубо говоря это значение с флагом, NullableInt { Val iint, Exists nool}, помогает разлепить 0 и null и эффективно с точки зрения памяти;
4) Полноценный optional на дженериках, их с прошлой версии го стало можно делать. Единственный минус, в стдлиб универсального Optional[T] пока нет, но по идее структура тривиальная, мб и завезут когда-то.
В конкретно твоём случае я думаю, тебе везде нужно оставить просто int, потому что 0 статистики и отсутствие статистики в целом примерно одно и тоже. Или сделать все int (вместо твоего *int) и рядом поставить флаг is_calculated, ну короче думаю ты меня понял.
Пардон, NullableInt { Val int, Exists bool} конечно же, чет я опечатался
1) Я думаю у тебя в каждом цикле должен создаваться свой context.Background с каким-то таймаутом, чтобы у тебя конкретный прогон цикла отваливался если зависнет;
2) Ошибки всё же обрабатывай, в логи хотя бы пиши, а не просто скипай, потом пригодится; Паника тут конечно вообще пиздец как не к месту;
3) Expired не скипай просто так в коде, нарвешься на случай, когда их будет ровно столько же, какой ты лимит укажешь в GetAll и у тебя всё застакается нахрен. Лучше прям в GetAll сделай условие в самом запросе. Вида `select * from tasks where call_until < NOW()`;
4) Лимиты кстати могут быть нужны, если у тебя их там нет, потому что задач теоретически может быть очень много. Норм схема делать это в два цикла примерно так: https://go.dev/play/p/9WXkfY92olm
5) Возможно стоит таски селектить через select for update skipped locked, чтобы дважды запущенный сервис не начал одно и то же выполнять; Но для этого придется всё в транзакцию обернуть;
6) Так часто долбить запросами базу (если это база) не стоит. Советую прикрутить туда ExponentialBackoff, чтобы проверял базу на таски каждые 1,2,4,8 и тд миллисекунд вплоть до 10 секунд максимум к примеру. Так оно будет быстро разгребать очередь в случае большого потока задач и не будет создавать большую ненужную нагрузку если задач особо нет;
7) Кстати непонятно, нахрена ты удаляешь таск если пришла ошибка. Ошибки это часть жизни, это сеть, она может мигнуть, пакет может пропасть и тд. Обычно таск просто скипается в таком случае.
for {
ctx := context.WithTimeout(context.Background(), time.Second*10)
// и вперед юзать ctx.
// тогда одна итерация цикла у тебя займет не более 10 секунд, если соединение провиснет, база затупит и тд
}
поинтеры норм, если тебе нужно отличать nil. тут можно пожаловаться на постановку задачи, т.к. не понятно как при вычислении среднего учитывать даты у которых NULL значения - считаем ли их за ноль (и тогда без боли можем убрать поинтеры и заюзать зеро велью) или просто пропускаем.
алсо делать из реквеста и респонса одну суперструктуру не стоит
> алсо делать из реквеста и респонса одну суперструктуру не стоит
Из реквеста и респонса не стоит, а моделировать то, что лежит в бд в виде одной структуры ок. Как я понял он на уровне домена зачем-то две структуры хочет использовать=
Условно
stats := Stats{}
statsRepo.Save(ctx, &stats)
calculator.Calculate(&stats)
return stats // а дальше уже ручками маппишь в респонс
я к тому, что контекст с таймаутом это не бекграунд контекст.
к тому же там в функции уже есть родительский контекст
Спасибо за такой развернутый коммент. Понимания стало больше. Думаю в этом случае оправдано оставить указатели, поскольку в варианте с булеанами нужно будет на каждое calculated поле заводить, поскольку зависят от разных.
>>429394
Согласен, ИРЛ надо было бы спросить об этом, но работаем с тем что есть.
>>429403
Да, в принципе знаю, что иногда оправдано завести несколько структур на domain, DTO для базы, DTO для HTTP, но тут все достаточно просто и плодить сущности без необходимости не стал.
В базе лежит AdStat, у которого есть метод Calculate, который возвращает вторую структуру, которая уже пишется в JSON
Всё так, поэтому в Go это оператор объявления + присвоения с выводом типа.
Как в джаве var x = "shit";
А присвоение это "="
Год стажа похапэ, возникло некоторое желание уйти от динамикодрисни. Финтех.
Рассматривал что-то из жаба / шарп / голанг, по-моему больше ничего строгого на проде в беке не юзается.
Учил жабу месяца 4 в свободное время, коммичу в попенсурс, продвинулся до уровня "знаю жаба кор кроме многопотока, коллекций и стрим апи", начал спринг и как-то сдулся спринг мне нравится, сдулся по причине далее. Получается, надо прям дохуя наебенить знаний в голову, чтобы пойти на обслуживание легаси за тот же прайс, который сейчас имею, с достаточно мутными дальнейшими перспективами.
Как по вашему, го имеет шанс стать серебряной пулей для меня?
Если надо что-то ещё пояснить из бекграунда, спрашивайте.
Ну в Го тебе придется выдрочить этот сраный многопоток в джаве кстати тоже до уровня "могу с закрытыми глазами написать неблокирующую lock-free хешмапу, а еще могу пояснить за горутины/корутины/файберы/async-await'ы и их различия, могу рассказать про кишочки шедулера и netpoll", на что потребуется довольно-таки дохуя времени, потому что материалов, где это нормально объяснено хуй да нихуя, и большая часть разрабов очень часто путается в этих тонкостях, но эти тонкости всегда спрашивают на собесах, и отвечать нужно очень уверенно.
>с достаточно мутными дальнейшими перспективами
В го кстати не очень уж много и платят, ну примерно как тем джавистам во всяких банках и энтерпрайзе, только на го в ритейле и екоммерс обычно пишут. Вообще вилка разраба всегда довольно стандартная вещь и каких-то чудес уровня 250 на руки просто так ждать не стоит
Нихуя, не пугай чувака.
В го придется разбираться с многопотоком, но он довольно тривиальный и в реальной работе нужен редко, если ты свои бд или там аналитическую обработку не пишешь.
Бизнес-логика как правило синхронна или около того.
Так что ему придется выучить несколько базовых паттернов и инструментов типа мьютексов и каналов и чуть теории для собесов.
>>429847
Хз, знаю конторы, где гошникам платят больше. Надо короче рассматривать конкретные конторы, я знаю го ~500к и джаву ~100к. Судя по средней на рынке у них всё +- одинаково.
>>429868
Думаю сокращения происходят +- везде. Но c# должно конечно задеть сильнее всего, раз мелкомягкие ушли из рф.
>>429834
Значится, положняк такой.
Учить теорию и приколы конкретного языка тебе придется в любом случае и в любом случае переход на другой стек без опыта это будет некоторый провал для тебя по рейту. Могу порекомендовать найти контору, у которой есть и php и что-то второе и наняться туда с договоренностью, что у них ты перейдешь фулл тайм на го (к примеру) со временм. Так и ты придешь не с нулём опыта, и контора получит кого-то +- что-то знающего.
По поводу выбора.
c# в целом найс, но я хз какие у него перспективы в РФ.
Java точно очень популярна, хороший вариант был бы, если бы не спринг, который тебе придется учить и вот это отдельная область знаний. То есть придется прям изучать приколы отдельных либ, которые часто очень переусложнены, какой-нибудь гибернейт это вообще пиздец.
Го в целом прикольный и, главное, кейс "монолит на php + микросервисы на го" очень популярен, что плюс для тебя. И ещё по сравнению с джавой в го тебе надо будет меньше всего учить. Но при этом рынок труда у гошников меньше джавогого, это 100%.
Хз, решай сам. Я бы выбрал или жаву, или го. А может пробовался бы и туда, и туда, куда возьмут с большими деньгами, туда и пошел бы. Не так уж и сложно на миддл уровне выучиться проходить собесы.
Максимальное спасибо
>Вообще вилка разраба всегда довольно стандартная вещь
Как же хуёво.
В 1с получаю по стандартной вилке разраба (мидл - 140к, насколько стандартно?), хочу выкатиться, но всё выглядит так, что выкачусь я только нахуй на плюс-минус то же самое, только въебав времени по дороге и просев по зп.
мимо зачем же я выбрал 1с
на самом деле знаю зачем - в мухосрани кроме 1с были только кресты
Всегда рофлю с фраз типа "250к на руки это какое-то чудо", зачем вы в это верите вообще.
>>429923
Не верь этому всему. Никакой средней или стандартной вилки есть и все ограничения только у тебя в голове. Я серьезно.
Всегда, абсолютно всегда можно найти контору, которая платит больше. Да, чем дальше, тем таких контор меньше, но суть в том, что если упорно работать именно на поиск контор с большим рейтом и попытки туда попасть, то всё в итоге получится.
Зачастую даже не нужно быть супер-пупер сеньором для этого.
Но в какой-то момент придется переходить на удаленку, учить язык и тд и тп.
Ещё один момент, в индустрии очень много джунов и неудачников, которые реально меряют всё по себе, если такой чел сидит в мухосрани и зарабатывает 40, то он всем будет утверждать, что это честная зп и вообще потолок. Надо уметь не слушать большинство.
Я кстати помню, как мне, когда я только начинал, начальник заливал про то, что 100к это вообще потолок для разраба вообще везде, а суммы больше это уже для директоров и больших начальников и я в эти сказки радостно верил.
мимо-500к/мес гошник, начинал с 20к в месяц из мухосрани лет 10 назад
В общем, как грамотно менеджить пользовательские сообщения: об ошибках, сообщения cli-интерфейса и прочее.
Заводить "конфиг" мессаджей и парсить в память? Хардкодить? Хранить в key-value ДБ?
А если требуется несколько локализаций?
Реквестирую Ваш опыт, бест практисы, ресурсы, где почитать подробнее
принято конечно же хардкодить, писать часть сообщений на русском, а часть на английском, и не ебаться с локализациями.
>Заводить "конфиг" мессаджей и парсить в память? Хардкодить?
ты вполне можешь хранить тексты в каких-нибудь .po и кодгенерацией их """"""хардкодить"""""". если твои пользователи не будут файлы править подсибя, эти варианты чуть менее чем нихуя различаются, кроме ебли с подгрузкой файла в рантайме. наверняка у гошки даже есть пакет для gettext.
>Хранить в key-value ДБ?
нахуя
>не ебаться с локализациями
а если "бизнес хочет"?
>Хранить в key-value ДБ? - нахуя
Ну допустим у тебя жеский тыпрайс, миллионы возможных сообщений, зачем их держать в памяти? А если несколько инстансов, еще и по много раз. Где-то слышал, что вполне себе используется
И на лету кстати можно контент заменять, без перезапуска кластера
Го как правило это сервера и апи, а ошибки показываются клиентом. Соответственно, апи возвращает коды ошибок, а клиенты их сами показывают.
Сама задача такого показа текста в случае ошибок не отличается от всех других случаев: у тебя в приложении захардкожены некие ключи, которые ты пропускаешь через локализацию и на выходе получаешь текст, который и показываешь.
Так оно и работает примерно везде.
Вопрос только в том, как это хранить этот маппинг.
В простом случае его подкладывают рядом с приложением и/или вкомпиливают сразу внутрь. Если тебе не нужно на лету менеджить тексты, вполне нормальный подход. Формат файлов тут может быть любым, хоть json.
Как вариант, можешь хранить их в неком хранилище, чтобы потом ими оперативно управлять, исправляя переводы на лету в случае косяков.
Тут такой момент, что это уже в принципе сводит задачу к менеджменту контента в приложении, тексты ошибок здесь ничем не отличаются от заголовков, кнопочек и тп.
В качестве хранилища можешь использовать свою базу, если у тебя свой сервер или какой-нибудь внешний сервис типа localize. Мы как-то раз использовали гуглотаблицу, в которую просто ходили из приложения по апи, полет был нормальный.
То есть у нас есть что то типа
type MyError struct {
__Code string
__Message string
__Context any
}
На клиент мы отправляем code, в лог пишем message. Правильно уловил?
где го где карбон, ты ебан или да?
Хз вообще почему кто-то на карбон внимание обращает. Очередной экспериментальный недоязык от большой конторы, они их раз в год выпускают.
На нём никто всерьез не пишет, никакой софт не написан, пакетов и библиотек нет, сообщества нет, населен роботами.
Такую хуйню надо просто игнорировать, потому что даже, если гугл реально хочет его развивать (а это не так) и даже если у него это получится (шанс 5%), то конкурентоспособным он станет только лет через 5-10 минимум.
Нахуя? Го даже не ооп блятъ, нахуя они своими полупидорскими паттернами лезут в наш манямирок? Они сидели в легаси болоте пусть и сидели бы, что они столько шума поднимают. Скоро го тоже испоганят адепты легаси параши
В чем я не прав?
Подожди, а у тебя код уровня
СделатьТоТо(арг1, арг2) {
сделатьОднуХуйню(...);
сделатьДругуюХуйню(...);
}
Ну вполне логично что люди хотят от этого уходить, т.к. это дорого поддерживать.
Угу, легче же писать абстракцию на абстракции, паттерны на паттерне, дрочить миллион классов чтобы сделать один объект
Зависит от масштабов.
Подожди, вот слепим мы из го кроссплатформенный компилируемый шарпик и тогда сможем перекатываться.
Короче реквестирую годные проекты с clean architecture + rabbitmq. Можете послать в гугл, все равно скоро туда собирался пойти, но возможно тут что-то годное подкинут
Бля анончик, сам планировал написать пет проект с очередями. Бампну твой вопрос
Ну и я бампну, чего бы и нет.
Просто берёшь и встраиваешь как и любой другой брокер. Консьюмер берёт запрос из очереди, триггерит юзкейс, который в свою очередь кидает ответ в паблишера обратно или сторонний сервисНэйм.
TS - де-факто стандарт что для фронта что для бека. Нормальные проекты без него не делаются.
Рад это слышать, возможно в будущем поближе познакомлюсь с нодой и её экосистемой.
Разрабатывать большой проект без типов (и без абстрактных фабрик) - дно, тут полностью согласен.
Когда завезут - тогда и приходи. И чтобы они реально работали, а не были ебучими тайпхинтами, как в питоне.
Карбон нужен исключительно для системного программирования
А как мы уже знаем, плюсовики даже на новый стандарт переезжают со скрежетом, что тут говорить про новый язык?
Кто-то не проёбывал курс вычислительной математики в вузе, это не заслуга вашего борщехлёбского говносикпа.
Ты или штаны надень или крестик сними
Как нахуй "Program exited." он совсем ебобо?
А причём тут нахуй язык, ты ебани себе на комп компилятор и им компилируй уже.
Он есть, просто не в том виде, в каком он представлен в других языках. Удобнее он или нет -- вопрос другой.
Два чаю
Вот кстати кроме шуток. Если и есть та вещь, по которой я не скучаю в го кроме xml, спринга и гибернейта, лол, так это ооп. Практика показывает, что это какое-то тупиковое направление, и на реальную жизнь правила ООП натягивается очень плохо.
То же наследование во первых приносит больше проблем, чем пользы, а во вторых, как правило просто не нужно.
Всё, что требуется, это интерфейсы, чтобы описывать поведение и классы (в го - структуры), чтобы его реализовывать. Всё.
Остальная магическая хуйня от лукавого.
мимо
Плохо то, что нет явного указания, что структура имплементит такой-то интерфейс. Ну и было бы неплохо, если методы можно было бы прямо в теле структуры хуярить, как это в джава классах придумано. Когда все в месте собрано, то как-то лучше читается что-ли.
>То же наследование во первых приносит больше проблем, чем пользы, а во вторых, как правило просто не нужно.
А его разве обязательно использовать?
Ну качині інтерфейси ж, ти чого?
Нет, но это один из столпов. ООП в его классическом панимании без наследования будет уже не ООП.
>>440705
> Плохо то, что нет явного указания, что структура имплементит такой-то интерфейс.
Ващет есть.
```
var _ fmt.Stringer = &Foo{}
type Foo struct {}
```
либо (то же самое но с большим количеством понтов)
```
var _ fmt.Stringer = (*Foo)(nil)
type Foo struct {}
```
Тебе IDE в таком случае будет даже предлагать сгенерить недостающие методы и тп.
> у и было бы неплохо, если методы можно было бы прямо в теле структуры хуярить, как это в джава классах придумано.
Вкусовщина, лично мне наоборот по отдельности больше нравится, иначе появляется слишком много вложенных скобочек.
долбаебы-оопщики даже новое слово object-based придумали чтобы отличать языки где УУУУУУУУУ НАСЛЕДОВАТЬСЯ НЕЛЬЗЯ ЭТО НЕ ООП
Ты либо даёшь наследоваться, либо не называешь это ООП и используешь корректный термин.
Видел таких же долбоёбов, которые пытаются прилепить к Go ярлык ФП, мол, есть анонимные функции и их можно передавать в другие функции, значит ФП.
>наследоваться
Хуйня без задач.
Какое "классическое определение"? Небось еще и на паттерны передергиваешь?
Есть что-то типа объектов + полиморфизм - ООП.
/тред
ага, миллионы детей в африке запутались и потратили свою последнюю калорию, когда кто-то назвал ОБ язык ОО. нам же нужен отдельный термин для всего, а то недостаточно душно. бля давайте придумаем новый термин для ОО языков, где есть анонимные функции. бусть это будет ФООП.
200[/spoiler ]Ок.
Наследование - не ООП. Наследование противоречит ООП.
На самом деле в функциональном стиле можно писать практически на любом современном языке, так же как и на любом функциональном можно писать в империативном стиле.
Но, между тем, разделение у языков есть.
И разница здесь в том, что есть языки специально заточенные под определенные парадигмы. К примеру, со встроенной в язык обязательной иммутабельностью, с умным выводом типов и разверткой лямбд при компиляции и тд и тп. Условные хаскель и скала к примеру.
И вот с этой точки зрения го определенно классический империативный, потому что лямбды то в нём писать можно, но вот инфраструктуры вокруг них на уровне языка очень мало, это будет как забивать гвозди микроскопом, можно, но неэффективно.
Теперь касательно ооп. ООП это тоже своего рода парадигма, которая предлагает нам композировать логику в классы, с возможностью абстрагировать их, подменять и оперировать этими абстракциями без привязки к конкретике. Грубо говоря, оперировать интерфейсами, а не конкретными классами.
С этой точки зрения го - вполне себе ООПшный язык, он это позволяет.
Другое дело, что классическая трактовка ооп говорит нам, что должно быть ещё наследование, а в го такое отношение между классами отсутствует, его можно только сымитировать через композицию. Что не так уж плохо, просто это не строго равно наследованию.
Так что я бы сказал, что го - условно ооп'шный.
Кстати, прогуглил тут, на википедии говорят, что
> Лука Карделли[ и Мартин Абади построили теоретическое обоснование ООП и классификацию на основе этого обоснования. Они отмечают, что выделенные ими понятия и категории вместе встречаются далеко не во всех ОО-языках, большинство языков поддерживают лишь подмножества теории, а порой и своеобразные отклонения от неё.
Так что норм, го реализует некоторое подмножество концепций ООП. На этом срачи надо заканчивать.
а те, кто считают, что ооп это если нужно class и implements в коде писать - неучи
Херня для нубов, пишется с закрытыми глазами за 2 минуты не отвлекаясь от чашки с кофе. Я не шучу, действительно тривиальные вещи.
Как работают каналы под капотом в Гохе? Для меня (бывшего жопаскриптера) какая-то магия: создаем канал который ждет входящие данные и как только они появляют на другом конце, вытягивает их и начинает над ними работу. Даже если ебнуть тысячи каналов, каких-то просадоу по cpu или памяти не будет
Шо это?
Если вкратце, есть сервис по аренде автомобилей, клиент авторизуется/регистрируется и выбирает из списка нужный автомобиль, посылает запрос на аренду, сервис проверяет статус клиента, конкретно смотрит на количество штрафов, стаж вождения (в зависимости от стажа вождения можно выбирать машину классом выше), если все ок то отвечает что аренда прошла успешно.
Сервис состоит из следующих компонентов
1. Nginx - который перенаправляет и проксирует запросы
2. REST сервис авторизации\регистрации - название говорит само за себя
3. REST сервис аренды - предоставляет список доступных автомобилей, статус арендованных машин пользователем
4. REST сервис проверки - проверяет пользователя, а именно такие вещи как наличие прав, кол-во штрафов, стаж вождения. Он получает запрос на проверку через очередь от сервиса аренды и пересылает внешнему источнику (у меня он просто будет заглушкой), получаемый ответ он формирует (если нужно то из БД сервиса берет данные) и пересылает обратно сервису аренды.
5. REST сервис добавления машин - сервис для админов которые добавляют новые тачки
6. СУБД будет постгрес
7. Работать будет на Docker Swarm
8. Мониторинг Prometheus + Grafana
Есть следующие вопросы:
1. Как авторизовать пользователя? Достаточно ли будет брать JWT?
2. Какой фреймворк взять? Gin-а будет достаточно?
3. Не работал с ОРМ на го. Что можно взять? Или GOбояре им не пользуются и хуярят чистый sql запросы?
Пока только такие вопросы, был бы рад с вами обсудить его с умнейшими из мира сего
Если вкратце, есть сервис по аренде автомобилей, клиент авторизуется/регистрируется и выбирает из списка нужный автомобиль, посылает запрос на аренду, сервис проверяет статус клиента, конкретно смотрит на количество штрафов, стаж вождения (в зависимости от стажа вождения можно выбирать машину классом выше), если все ок то отвечает что аренда прошла успешно.
Сервис состоит из следующих компонентов
1. Nginx - который перенаправляет и проксирует запросы
2. REST сервис авторизации\регистрации - название говорит само за себя
3. REST сервис аренды - предоставляет список доступных автомобилей, статус арендованных машин пользователем
4. REST сервис проверки - проверяет пользователя, а именно такие вещи как наличие прав, кол-во штрафов, стаж вождения. Он получает запрос на проверку через очередь от сервиса аренды и пересылает внешнему источнику (у меня он просто будет заглушкой), получаемый ответ он формирует (если нужно то из БД сервиса берет данные) и пересылает обратно сервису аренды.
5. REST сервис добавления машин - сервис для админов которые добавляют новые тачки
6. СУБД будет постгрес
7. Работать будет на Docker Swarm
8. Мониторинг Prometheus + Grafana
Есть следующие вопросы:
1. Как авторизовать пользователя? Достаточно ли будет брать JWT?
2. Какой фреймворк взять? Gin-а будет достаточно?
3. Не работал с ОРМ на го. Что можно взять? Или GOбояре им не пользуются и хуярят чистый sql запросы?
Пока только такие вопросы, был бы рад с вами обсудить его с умнейшими из мира сего
По архитектуре ХЗ, по вопросам
1) refresh + access token поверх JWT
2) Да, норм
3) Никаких ORM. Бери squirrel, очень удобно.
Я так понимаю ты про Горутины. Ну это типа виртуальные треды и управляются планировщиком Го. Поскольку они управляются рантаймом, не приходится тратить время на syscall's.
Ну и горутина весит мало, поэтому можно создавать их в очень больших количествах, поскольку пока они спят, то занимают только RAM.
Как понять тему указателей и остаться без ментальных расстройств?
Пытаюсь вкатится в Go, изучаю тему. Вроде все ок, все понятно, так как до этого кодил на других скрипопарашах (Bash, Powershell). Но вот тема указателей выводит меня из себя.
Можете посоветовать хорошую статью, где это хорошо разжевывается?
хуле тут понимать анончик, включи моск. Слово указатель говорит само за себя, значит оно на что-то указывает, на что может указывать? На маму абу? На хохлов? Вроде нет, скорее всего на адрес ячейки в оперативной памяти где хранятся данные, вот и все епта бля. Самый просто пример это когда ты в функцию передаешь переменную ты не передаешь переменную ты передаешь копию, то есть за пределами функции содержимое переменной не меняется. Но если ты передашь указатель той переменной то ты уже сможешь поменять содержимое переменной, понял йопта бля?
Лол самое охуенное объяснение указателей что я видел))
Госконтора - это некоммерческая организация, живущая на бюджетные средства. То, что часть большая часть акций сбербанка куплена государством, не делает его госконторой.
>не делает его госконторой.
Это государственный банк, маня.
Или под гос конторой подразумеваешь паспортный стол, ЖЭК или Службу судебных приставов?
В рашке нет государственных банков, проснись дед, совок давно развалился.
> Или под гос конторой подразумеваешь паспортный стол, ЖЭК или Службу судебных приставов?
Все подразумевают, кроме шизоидов вроде тебя. И там тоже пишут на Go.
Да, типа того
бля да тоже самое што nameref в баше, только там не имя передается, а адрес переменной
Как понять тему nameref и остаться без ментальных расстройств?
Пидораха так и не ответила на мой вопрос, продолжая маняврировать.
Что под твои критерии попадает под госконтору?
Федеральные законы, в которых учреждаются госконторы. Предъяви такой закон о сбербанке, и я сольюсь.
Да, видит бог, что используется.
Сложная сложной рознь. Некоторые вполне примитивны.
Зайди на курс, там сейчас как раз набор, открой да посмотри чё за задачи. Я оцениваю самую сложную как 5kyu с кодварса, т.е. нихуя.
Либо наебали, либо это старый курс на торрентах, либо имелось в виду "ну эта, после нашего курса в высоконагруженный машоб оторвут с руками, базарю"
Это я понял, но в пистоне например явно говорят не ебош в луп задачи которые не позволят ему переключаться. Там механизм переключения очевиден и поэтому если что, то явно его заюзать можно. Поэтому интересно как это тут происходит.
есть runtime.Gosched, но после 1.14 тебе ебаться с
>не ебош в луп задачи которые не позволят ему переключаться
не нужно, шедулинг уже не кооперативный.
То есть теперь запускать горутину в шедулер это как запускать задачу в треды? ОС Гошный рантайм все разрулит?
Это не я вопрос задавал.
Там написано, что этот курс подойдет для людей, которые разрабатывают на Go от двух лет, либо переходят с другого языка. То есть не для новичков.
ага
> Там написано, что этот курс подойдет для людей, которые разрабатывают на Go от двух лет, либо переходят с другого языка.
И кстати нет, там такого не написано.
Там написано "опыт коммерческой разработки" - похуй на чём.
Сомневаюсь, что тому, кто уже два года на гохе пишет - этот курс чем-то способен помочь.
Дегенеративное мышление goвночиста во всей красе:
>у всех легаси а у меня нет (потому что в goвне за все годы не сделали ни одного экосистемного фреймворка и есть только ворох полузаброшенных библиотека, написанных васянами, большая часть толковых из которых поняли в какое говно вляпались и пошли в Rust/Cpp)
>к кабану (ведь на стеке goвна такие охуенные и щедрые РАБОТОДАТЕЛИ как ЯГОДКИ и предефолтовый ОЗОН, вот это Эдем на Земле для разработчика)
Чем быстрее вы поймёте и признаете, что вас поимели маркетологи, тем быстрее перейдёте на нормальные технологии, а не будете страдать.
>нормальные технологии
Какие?
>экосистемного фреймворка
Это что такое? Какое преимущество фреймворка над библиотекой?
Я тебя задетектил, ты тот порванный джавист из мвп треда который оценивает стек по компаниям в пидорашке, которые эту технологию используют
>на нормальные технологии
Лол бля а что по твоему нормальные технологии?
Джаба? Иди пиздуй дрочить jvm а то она уже загибается от 10 RPS
Сисярп? Как на вкус хуй майкрософта? Вас гоев разводят на бабки а вы и рады этому
Nodejs? Ты го с нодой решил сравнить? Совсем ебобо?
Что ещё там было у тебя? Пыха? Он норм, к нему претензий нет
У ноды тащемта единственная киллер фича это то, что один язык на бэке и на фронте, что на бумаге выглядит красиво. Одно время люди ещё с этим не наигрались и поэтому многие соблазнялись.
Но сейчас время уже другое.
Практически во всём остальном нода хуже го.
Всё-таки реальная многопоточность сильно лучше просто неблокирующего io, го намного эффективнее утилизирует ресурсы CPU. В случае с нодой ты конечно можешь позапускать процессов по числу процессоров, но всё равно выйдет говно, потому что какие-то из них будут простаивать, а какие-то наоборот перегружены. Тогда как го под капотом сам балансирует нагрузку между ядрами.
Всё-таки npm говно.
Всё-таки экосистема js ну вообще на любителя.
Всё-таки фронтенд бекенду рознь и любители красить кнопки никогда не смогут дизайнить и программировать сложные системы.
И так далее.
>У ноды тащемта единственная киллер фича это то, что один язык на бэке и на фронте
Нет, у ноды киллер фича хуяк-хуяк и в продакшн. Если тебе надо что-то написать быстро или создать какой-то прототип, либо поддерживать то что очень часто меняется, то нода это топ решение. Чтобы уменьшить боль придумали тайпскрипт. Собственно на этом все преимущества.
>Всё-таки npm говно.
>Всё-таки экосистема js ну вообще на любителя.
Говно, особенно любители использовать isOdd и isArray в зависимостях должны гореть в аду, в чане с говном
>Всё-таки фронтенд бекенду рознь
Да, никогда один и тот же код и там и там не использовался
Но если надо наклепать бота чтобы он пользователю что-то высрал в телеграмме, то вполне рабочее решение
>Иди пиздуй дрочить jvm а то она уже загибается от 10 RPS
Каво? Реактивщина есть, виртуальные треды есть. Никто не заставляет тредпул использовать стандартный.
Анончик я совсем зеленый в этом, так что вопрос без подъеба. А почему не пщ?
Ну вот ты наклепал бота, и с командой
go build -o hueta main.go && ./hueta.out
Вот теперь я запустил свою какаху, чем это медленне чем на ноде?
Медленнее в скорости разработки, пока ты пишешь структуры и занимаешься подобной хуйней на js ты уже наговнякаешь половину кода.
А по производительности go разумеется быстрее
Производительность нужна таким гигантам вроде озона или авиты, которые уже проделали долгий путь от куска говна на пхп до тысяч серверов.
Нет, тот порванный джавист это я, но я этого не писал.
У меня горит от того, что в яндексе на джаве мало пишут, в то время как я вложил дохуя времени в изучение жабы и инфраструктуры вокруг нее. Кроме как в яндексе я работать нигде не собираюсь, так как не считаю остальные места для работы достойными меня.
мимо вкатун в го и жабу
Не верь этому долбоебу. И вообще никогда не покупайся на "скорость разработки", этот миф эксплуатируют все, кому не лень.
Такой фактор есть, но он роляет только в случае, если мы сравниваем концептуально разные языки, например, плюсы с их ручным управлением памятью и джаву/го/c#/ноду с автоматическим сборщиком мусора, который реально снимает с программиста часть работы. И то современный c++ с его умными указателями и прочими ништяками вполне себе может быть сравним с той же джавой.
Так вот, скорость разработки методом "хуяк-хуяк" на сходных языках практически одинакова, разница будет в мелочах, вида "func или function", "class или struct" и тд и тп. И то, современные IDE отлично автокомплитят код, а многие решения берутся просто копипастой и не так важно, сколько там кода. Опять же, в любом языке есть фреймворки с той или иной автоматизацией каких-то общих задач, го, нода, джава, один хрен.
Я писал на множестве языков и честно скажу, разница тут субъективная (кто на чём больше писал, тот на том и быстрее пишет) и исключительно в оттенках.
А, ну и в количестве библиотек ещё, иногда хорошие либы бывают только под определенный язык, соответственно, этот язык оказывается быстрее, но в данном конкретном случае.
>>442712
И да, и нет. Если ты придешь к владельцу любой конторы и спросишь его, хочет ли он платить за сервера меньше в два раза, то думаю, ты услышишь только один ответ. Естественно, сервера это зачастую копейки, но сам факт.
А ещё код очень редко переписывается, и если ты сразу начал проект на тормозном говне, то в какой-то момент ты в него упрешься, а менять коней на переправе будет уже больно.
>>442714
Ты странный.
Во-первых, странно, что ты считаешь достойным только Яндекс, они всегда выезжали исключительно на бренде, а платили разработчикми раза в два меньше, чем прочие крупные конторы. По-моему меньше яндекса только касперский платил. Опционы и rsu кстати не роляют, если ты сядешь и внимательно посчитаешь всё с калькулятором, то увидишь, что даже при сохранении тренда на рост стоимости акций просто x1.5 к твоей текущей зп будет выгоднее, а если ты эти лишние 0.5 будешь вкладывать в ценные бумаги самостоятельно, то сильно выгоднее.
Техническая культура там тоже была очень специфичная, большое дрочево на ьайтики и самописные велосипеды даже там, где это совсем не требуется. Тем более, сейчас из яндекса ушло очень много людей и техническая культура ещё сильнее просядет.
Тут ещё есть такой момент, что сильным разработчиком тебя делает твой опыт и насмотренность, в одной конторе ты очень быстро усохнешь, привыкнешь и выпадешь из трендов. Превратишься в старпера из института, которые до сих пор уверены, что серьезный софт на дельфи это стильно модно молодежно.
И это не говоря про рейты, смена работы это лучший способ поднять рейт и ранг.
Короче, смотри на конкретного работодателя попроще и помни, что он тебе не друг, в его интересах платить тебе как можно меньше и удерживать тебя у себя как можно больше, в идеале ещё и убеждая тебя в том, что ты уже в выигрыше (а без насмотренности и возможности сравнивать ты никогда не поймешь, где тебя обманывают).
Во-вторых, ты сказал ключевую вещь:
> горит от того, что на языке Х мало пишут, в то время как я вложил дохуя времени в изучение языка и инфраструктуры вокруг него
это очень популярный развод, ты долго пишешь на одном языке и тебе жалко выбрасывать весь этот труд на помойку. Так вот, когда ты сменишь 2-3 языка ты поймешь, что они все одинаковые на концептуальном уровне, а всё остальное - это детали и что ты ничего не выбрасываешь. Джава или не джава это уже не важно.
Конечно если языки меняются не кардинально, как если бы ты джаву на плюсы менял как в яндексе делают, лол.
И это же значит, что нет смысла изучать какую-то специфичную ерунду, потому что спустя несколько версий стека оно изменится, а ты может к тому времени и вообще что-то другое делать будешь. Изучать технологии нужно эффективно
Не верь этому долбоебу. И вообще никогда не покупайся на "скорость разработки", этот миф эксплуатируют все, кому не лень.
Такой фактор есть, но он роляет только в случае, если мы сравниваем концептуально разные языки, например, плюсы с их ручным управлением памятью и джаву/го/c#/ноду с автоматическим сборщиком мусора, который реально снимает с программиста часть работы. И то современный c++ с его умными указателями и прочими ништяками вполне себе может быть сравним с той же джавой.
Так вот, скорость разработки методом "хуяк-хуяк" на сходных языках практически одинакова, разница будет в мелочах, вида "func или function", "class или struct" и тд и тп. И то, современные IDE отлично автокомплитят код, а многие решения берутся просто копипастой и не так важно, сколько там кода. Опять же, в любом языке есть фреймворки с той или иной автоматизацией каких-то общих задач, го, нода, джава, один хрен.
Я писал на множестве языков и честно скажу, разница тут субъективная (кто на чём больше писал, тот на том и быстрее пишет) и исключительно в оттенках.
А, ну и в количестве библиотек ещё, иногда хорошие либы бывают только под определенный язык, соответственно, этот язык оказывается быстрее, но в данном конкретном случае.
>>442712
И да, и нет. Если ты придешь к владельцу любой конторы и спросишь его, хочет ли он платить за сервера меньше в два раза, то думаю, ты услышишь только один ответ. Естественно, сервера это зачастую копейки, но сам факт.
А ещё код очень редко переписывается, и если ты сразу начал проект на тормозном говне, то в какой-то момент ты в него упрешься, а менять коней на переправе будет уже больно.
>>442714
Ты странный.
Во-первых, странно, что ты считаешь достойным только Яндекс, они всегда выезжали исключительно на бренде, а платили разработчикми раза в два меньше, чем прочие крупные конторы. По-моему меньше яндекса только касперский платил. Опционы и rsu кстати не роляют, если ты сядешь и внимательно посчитаешь всё с калькулятором, то увидишь, что даже при сохранении тренда на рост стоимости акций просто x1.5 к твоей текущей зп будет выгоднее, а если ты эти лишние 0.5 будешь вкладывать в ценные бумаги самостоятельно, то сильно выгоднее.
Техническая культура там тоже была очень специфичная, большое дрочево на ьайтики и самописные велосипеды даже там, где это совсем не требуется. Тем более, сейчас из яндекса ушло очень много людей и техническая культура ещё сильнее просядет.
Тут ещё есть такой момент, что сильным разработчиком тебя делает твой опыт и насмотренность, в одной конторе ты очень быстро усохнешь, привыкнешь и выпадешь из трендов. Превратишься в старпера из института, которые до сих пор уверены, что серьезный софт на дельфи это стильно модно молодежно.
И это не говоря про рейты, смена работы это лучший способ поднять рейт и ранг.
Короче, смотри на конкретного работодателя попроще и помни, что он тебе не друг, в его интересах платить тебе как можно меньше и удерживать тебя у себя как можно больше, в идеале ещё и убеждая тебя в том, что ты уже в выигрыше (а без насмотренности и возможности сравнивать ты никогда не поймешь, где тебя обманывают).
Во-вторых, ты сказал ключевую вещь:
> горит от того, что на языке Х мало пишут, в то время как я вложил дохуя времени в изучение языка и инфраструктуры вокруг него
это очень популярный развод, ты долго пишешь на одном языке и тебе жалко выбрасывать весь этот труд на помойку. Так вот, когда ты сменишь 2-3 языка ты поймешь, что они все одинаковые на концептуальном уровне, а всё остальное - это детали и что ты ничего не выбрасываешь. Джава или не джава это уже не важно.
Конечно если языки меняются не кардинально, как если бы ты джаву на плюсы менял как в яндексе делают, лол.
И это же значит, что нет смысла изучать какую-то специфичную ерунду, потому что спустя несколько версий стека оно изменится, а ты может к тому времени и вообще что-то другое делать будешь. Изучать технологии нужно эффективно
>Не верь этому долбоебу. И вообще никогда не покупайся на "скорость разработки", этот миф эксплуатируют все, кому не лень.
Это не миф, был бот которого я захуярил на ноде в одного за пару дней и то я больше узнавал чего надо сделать. Он срал в телегу, ходил в пару апишек и делал пару запросов и вообще не ясно было будут ли его использовать и нужно было накидать временное решение без особых трудозатрат. Потом когда все заебись и надо его переписать на раст поскольку у нас основной стек и нужно было для поддержки, вот тут я прикурил полдня только структуры сидел описывал и еще всякие грабли были типа json возвращает объект "{id_хуйни": хуяня}, но если пусто то возвращался пустой массив [] ебучие пхпшники, апишка не наша никто не поправит и я потратил какое-то время чтобы понять что за говно и написать метод прокладку для сериализации этого кусочка ведь для структуры нужно четко описать это вектор или хешмап. И ты постоянно натыкаешься на подобные мелочи, которые спокойно проглотит тот же js, вроде хуйня а по чуть-чуть время утекает на все эти мелочи.
И таких примеров у меня дохуя на динамически типизированных языках можно хуярить только в путь и в разы быстрее. Ну раз ты не долбоеб, рэмбо писавший на всех языках то тебе виднее. Лично я выбираю инструменты по задаче и не приколачиваю стенку шкафа на маленькие гвоздики кувалдой
Это означает только то, что ты хуёво знаешь свои инструменты, в данном случае раст. Без обид.
Вещи типа "смапить json в структуру" решаются тривиально вообще на любом языке, даже с обкладыванием их костылями.
И уж тем более на любом строго типизированном языке есть библиотеки-обертки вокруг json, которые умеют динамически его парсить, обращаться к полям, кастить их к нужным типам и тд. Уверен, в расте такие тоже есть.
serde_json если все написано красиво и без подъебов, просто пишешь структуру и сверху #[derive(Serialize, Deserialize)] и радуешься жизни, все как ты пишешь тривиально.
А если там как я выше описал есть подъебки и в одном и том же поле могут быть разные типы, ты начинаешь писать различные дополнительные методы чтобы подогнать под нужный тип. Хотя в go проще, пишешь interface{} и радуешься жизни, потом пиздишь на двачах что все делается легко лол))) В js это все не нужно, как и вообще писать структуры, на это все уходит время
Такое случается, бывает, что где-то нужны дополнительные приседания. Но так как твоя работа не состоит в том, чтобы маппить новые типы json 24/7 я надеюсь, то в итоге в масштабах затраченного времени скажем за месяц это вообще незначимая штука.
Тем более, что пишется такое с закрытыми глазами не отвлекаясь от ютьюбчика или мыслей о более важной задаче.
Тем более, что я уверен, что в расте есть возможность делать это ещё быстрее, чем ты описываешь, какой-нибудь тайп юнион с биндингом для сериализации и тд и тп. Ещё раз, задача супер распространенная и все заинтересованы в том, чтобы были инструменты, позволяющие решать такое с минимальными затратами и соответственно, все языки это умеют +- одинаково, с погрешностью в полчаса.
>есть подъебки и в одном и том же поле могут быть разные типы
А почему такое происходит. Мне кажется потому что на том конце сидя такие же умники "на динамике писать быстрее, взял ноду за день нахуячил". А если хочешь сделать неговно, то большую часть времени будешь думать над нормальными апи и архитектурой, а закодить их что на го, что на питухоне - дело за малым. Только динамикопарашу еще дебажить придется и юниттестами обкладывать.
Это кстати любопытный момент. "Рынок" библиотек и особенно публичных апи этот тот ещё "рынок лимонов".
Они могут сделать насколько угодно плохое апи и страдать будут не они, а ты. Им же выгоднее, потому что можно сэкономить на разработчиках.
А ты не всегда властен в том, какой сервис использовать, часто решение принимает бизнес, менеджеры и тп, ориентируясь на цены и прочую бизнесовую херь.
А твоё мнение по поводу качества апи никого не волнует, потому что ты сделаешь, выругаешься в интернете?
Ну вообще имел ввиду не только rest-api. Если брать по технологиям в целом, то откровенно ублюдский, но широкораспространенный api могу вспомнить только у JS, Windows. Остальное как-то эволюционирует, а говно отмирает потихоньку.
>А почему такое происходит.
Чаще всего накидали какую-то хуйню, она взлетела, заказчики попросили фич, их реализовали поверх говнокода сделатьнормально не хватает сил и бюджетов и так далее, далее и через какое-то время получается кусок говна, который все боятся тронуть чтобы ни у кого ничего не поломать. Не в языке проблема, а в подходе. Ну и с другой стороны если есть заказчики и им предоставляется какая-то хуйня, то ебутся с интеграцией апи уже люди заказчика
Они уволились всем отделом и нашли рабу в течении пары недель, у вайлдбериз висят вакансии где они готовы брать вкатунов и предлагать золотые горы мидлам, Паша Чабинский выиграл какую-то медаль на велогонках, так и работает на топовой должности. А с грузчиками там вообще как со скотом в сарае общаются, обычно как с быдлом, но там вообще как с коровами на ферме и шмонают на складе заставляя раздеваться до трусов, с пунктами выдачи тоже какая-то такая же хуйня. Короче перспективная развивающаяся контора
Данный скрипт я хочу поместить в линуксовый планировщик, который будет периодически чекать папку. Если там есть архив, то он будет создавать тот самый файл .done .
Но! Бывают и большие архивы. И мне нужно сделать так, чтобы при копировании файла в папку случайно не создался файл .done.
Как с помощью этого чудо языка можно проверить целостность файла? То есть, если файл полностью скопировался, только в том случае создается файл, если нет, то не соответственно не создается.
название во время загрузки одно, после другое, и желательно мутекс на это поставить чтоб чекер не чекал во время содания и переименования
>Как с помощью этого чудо языка можно проверить целостность файла
щитаешь чексуму читаеш чексуму сравниваеш чексумы
>И мне нужно сделать так, чтобы при копировании файла в папку случайно не создался файл .done.
как 99% программ делают всё скачивается во временный файл, потом атомарно переименовывается
>в линуксовый планировщик
прям в едро?
любая переменная в гохе может иметь адрес
number := 228
pNumber := &number
print(pnumber) //0x123
func increment(numberOther int) int {
return numberOther + 1
}
func increment2(pNumber int) {
pNumber = *pNumber + 1
}
при таком вызове number не станет 229
increment(number)
надо либо возвращать значение
number = increment(number)
либо посылать указатель
increment2(&number)
или
increment2(pNumber)
Прочитать два абзаца на офф сайте или go tour может? Если не даун, то сразу поймешь. Они даже называются "указатель", это не "монады" или "аппликативные функторы", по которым хер догадаешься, что это такое.
Тупо указатель, одна переменная указывает на другую.
Нахуя два языка?
Чтобы расширить очко кругозор и быстрее опыта набраться. Да и к тому же я выбираю одно направление enterprise, а языки по сути инструменты.
Какие языки то?
Java и Golang
Долго объяснять, главное что используются в одной области. А так, первый пушто дефакто стандард, второй как приятное дополнение, если не найду работу на первом языке то точно найду на втором.
У тебя дохуя времени?
Да, дохуя, пофакту в день работаю 3-4 часа в день
Сам в универе писал на C/C++ и Pascal, вроде не даун, 22лвл, в линухе шарю. Сам время от времени ебусь с арчом чтобы жизнь малиной не казалась
Это зависит от твоих целей. Конечно, любые знания по-своему полезны, это всегда вопрос эффективности, то есть соотношения выгоды и затраченных усилий.
Если ты собираешься работать разработчиком, то смысл точно будет, потому что это даст тебе достаточно широкий кругозор. Чем больше кода и разных подходов увидишь, тем больше будешь шарить, больше опыта будет в решении похожих задач и более "архитектурным" станет мышление.
Но!
Это всё скорее для мидл+ уровня.
Потому что зная наши универы, там тебя не научили примерно ничему (реально меньше 1% от знаний, которыми ты должен будешь обладать) и соответственно тебе придется в любом случае много всего узнавать и сильно перестраивать своё мышление, усложнять этот процесс ещё и несколькими языками не стоит.
Вот когда изучишь ту же джаву до уверенного уровня, тогда и будет иметь смысл изучать новое, будет хотя бы с чем сравнивать.
Поэтому я рекомендую тебе сначала пару лет вбросить в один стек если честно, то джаву, банально больше вакансий, легче будет найти нормальную работу, а уже потом что-то решать.
Только это, осторожнее будь с выбором первых мест работы. На джаве значительно больше тупого легаси и тупого энтерпрайза чем на го, хотя бы за счет специфики и возраста самого языка.
Можешь попасть в контору, где 10 индусов не думая хуярят абстрактные фабрики фабрик на спринг буте, в результате быстро ебнешься, а это навсегда.
Первая работа или несколько нужны такие, чтобы было достаточное разнообразие проектов, чтобы попробовать разные технологии, в идеале чтобы некоторые из них были с нуля, чтобы застать и может поучаствовать в архитектурном этапе, но при этом проекты должны быть достаточно большими, чтобы давать опыт поучаствовать в разработке сложных систем и достаточно длительными, чтобы научиться не только разрабатывать, но и поддерживать существующие решения.
Ну и контора должна быть достаточно большая, чтобы давать вот это всё и вообще предоставлять пространство для роста, но при этом достаточно маленькая, чтобы отношение к деньгам, проектам, клиентам и сотрудникам не стало абсолютно похуистичным.
Лично мне очень повезло первые несколько лет отработать в среднего размера аутсорсе (100 человек) для клиентов из US и EU, рекомендую тоже поискать себе что-то подобное.
Добра.
Хочу вкатиться в этот ваш Go. Посоветуйте какие курсы на русском можно пройти? Может есть бесплатные/платные? Спасибо, анончик!
Нашел в интернете платные курсы от яндекса и скиллбокса. Что лучше? И вообще стоит ли? Как мне кажется платные курсы больше мотивируют заниматься да и лучше по качеству, на то они и платные
Есть же на торрентах отус.
Чаю. Но на отус'е смотрю курсы для тех кто уже хоть что то понимает в программировании. А я прям полный нуль.
Ну на торрентах я видел только отус и озон (который бесплатный, но с необходимостью пройти контест), они оба для уже что-то понимающих чуваков.
Не уверен, что тебе в целом для вката в айти нужны курсы именно про го, тут не так много специфики, язык сравнительно простой.
Я бы рекомендовал для начала пройти базовые курсы по программированию для вкатунов, это:
1 алгоритмы и структуры данных
2 объектно ориентированное программирование
3 основы веба и бекенд разработки
4 базы данных
и может ещё что-то, это я из головы накидал.
Когда пройдешь вот это всё ну или если уже знаешь, вот тогда и переходи уже к специфике го, потому что тебе не поможет знание языка без умения собственно программировать.
Лично я в своё время просто прошёл го тур и всё, как я уже сказал, язык сам по себе довольно простой и имхо все "курсы по го" просто продают людям воздух.
>>443954
Не знаю насчет курсов, а статьи на хабре у отуса полное дерьмо, даже среди прочих корпоративных блогов, поэтому моё мнение о них крайне невысокое.
This, анон, спасибо. Озвучил мои мысли. Видимо мне действительно нужно начать хотя бы с основ, понять для чего вообще нужно программирование, язык это же просто инструмент. Я так и думаю. Но вот те самые основы где найти? Понимаю что сейчас есть куча всего в интернете, было бы желание. Но может есть какой то курс (даже платный)?
Уф, сложно сказать, я большую часть изучал самостоятельно и советовал бы тебе заранее подготовить себя, что IT в наше время это такая область, где тебя никто ничего не научит, кроме самых азов и что для того, чтобы поднимать свой уровень, тебе придется заниматься самообразованием, в том числе и на работе, и вместо работы, и в свободное время. Ты или фанатеешь от этого или охуееешь от объемов и разрозненности информации. Я вот в IT уже лет 10 и всё ещё не ощущаю, что знаю достаточно.
А вся эта обучающая шняга это ну такое, азы. Что курсы, что конференции (все эти Highload и тп), люди туда ходят больше попонтоваться и заработать денег, через пару лет работы ты внезапно поймешь, что реально 99% контента - оно только для джунов самого низкого уровня.
Примерно как в вове, мы сейчас с тобой обсуждаем гайды на кач 1-5 уровень.
Сейчас решил ради интереса погуглить курсы.
Скиллбокс полное говно, кажется, что они просто спеку по языку просто озвучили и продают, как курс.
Яндекс практикум (который "веб разработчик) не сильно лучше, что "базы данных" это один маленький блок "основ бекенд разработки", когда это прям основа основ. Тем более, там не постгря, а монга. Ага, новичкам. Непонятно, что за хипстеры это создавали.
Более-менее по описанию понравился только Хекслет, у них хотя бы много отдельных курсов и в своих "базовых" курсах вида https://ru.hexlet.io/programs/java они хотя бы отдельно пишут про архитектуру и бд, но конечно непонятно, что там вообще есть внутри.
Попробуй мб пройти у них
https://ru.hexlet.io/courses/introduction_to_programming (хз надо или нет лично тебе)
потом
https://pre.hexlet.io/java/либо https://ru.hexlet.io/programs/java (хз в чем разница, вероятно одно это типа совсем для нубов, а второе нет)
Потом обязательно
https://ru.hexlet.io/programs/algorithms
и https://ru.hexlet.io/courses/rdb-basics либо (а лучше вместе с) https://ru.hexlet.io/programs/sql-for-programmers
И мб нормально будет.
А там уже джуном устроишься куда сможешь и сам поймешь и за время собеседований и уже на месте, где у тебя пробелы, чего не хватает и тп.
Уф, сложно сказать, я большую часть изучал самостоятельно и советовал бы тебе заранее подготовить себя, что IT в наше время это такая область, где тебя никто ничего не научит, кроме самых азов и что для того, чтобы поднимать свой уровень, тебе придется заниматься самообразованием, в том числе и на работе, и вместо работы, и в свободное время. Ты или фанатеешь от этого или охуееешь от объемов и разрозненности информации. Я вот в IT уже лет 10 и всё ещё не ощущаю, что знаю достаточно.
А вся эта обучающая шняга это ну такое, азы. Что курсы, что конференции (все эти Highload и тп), люди туда ходят больше попонтоваться и заработать денег, через пару лет работы ты внезапно поймешь, что реально 99% контента - оно только для джунов самого низкого уровня.
Примерно как в вове, мы сейчас с тобой обсуждаем гайды на кач 1-5 уровень.
Сейчас решил ради интереса погуглить курсы.
Скиллбокс полное говно, кажется, что они просто спеку по языку просто озвучили и продают, как курс.
Яндекс практикум (который "веб разработчик) не сильно лучше, что "базы данных" это один маленький блок "основ бекенд разработки", когда это прям основа основ. Тем более, там не постгря, а монга. Ага, новичкам. Непонятно, что за хипстеры это создавали.
Более-менее по описанию понравился только Хекслет, у них хотя бы много отдельных курсов и в своих "базовых" курсах вида https://ru.hexlet.io/programs/java они хотя бы отдельно пишут про архитектуру и бд, но конечно непонятно, что там вообще есть внутри.
Попробуй мб пройти у них
https://ru.hexlet.io/courses/introduction_to_programming (хз надо или нет лично тебе)
потом
https://pre.hexlet.io/java/либо https://ru.hexlet.io/programs/java (хз в чем разница, вероятно одно это типа совсем для нубов, а второе нет)
Потом обязательно
https://ru.hexlet.io/programs/algorithms
и https://ru.hexlet.io/courses/rdb-basics либо (а лучше вместе с) https://ru.hexlet.io/programs/sql-for-programmers
И мб нормально будет.
А там уже джуном устроишься куда сможешь и сам поймешь и за время собеседований и уже на месте, где у тебя пробелы, чего не хватает и тп.
Хотя я ещё раз посмотрел, у скиллбокса есть какой-то про курс https://skillbox.ru/course/java-dev/ и в целом тоже и алгоритмы мелькают и что-то про базы они там рассказывают. Чёрт, не знаю даже.
Тут у тебя выбор между несколькими стульями и понять заранее и снаружи где говно, а где не говно очень сложно. Разве что если где-то можно посмотреть прям детально всю структуру их курса, с теорией и заданиями и планами обучения и сравнить с конкурентами.
Можешь кстати поискать сливы на торрентах и просто посравнивать контент, что понравится, то и возьмешь.
>>443849
> Как мне кажется платные курсы больше мотивируют заниматься
Хз, для меня это никогда не работало, или меня прет и тогда я делаю, или не прет и тогда не делаю.
> лучше по качеству, на то они и платные
Я бы на это сильно не надеялся, платные лучше по рекламе и зарабатыванию денег для владельцев в первую очередь. А условный оперсорс может быть вполне качественнее и проработаннее, потому что сделан людьми, которым нравится своё дело. Если бесплатные опенсорсные курсы вообще есть :)
У платных основное преимущество это возможность писать свои вопросы ментору, который тебе будет что-то отвечать и это может быть чуть легче, чем шариться по форумам и разбираться самостоятельно.
Гига-спасибо, анон!
Все равно я пока мало что понимаю и в потоке информации вокруг тяжело за что то конкретное зацепиться. Поэтому начну по твоей схеме:
1. Введение в программирование (https://ru.hexlet.io/courses/introduction_to_programming)
2. Подготовительный курс профессии Java-разработчик (https://pre.hexlet.io/java)
3. Алгоритмы и структуры данных (https://ru.hexlet.io/programs/algorithms)
4. Основы реляционных баз данных (https://ru.hexlet.io/courses/rdb-basics)
5. SQL для разработчиков (https://ru.hexlet.io/programs/sql-for-programmers).
Думаю после такого марафона что то да понимать начну. Попробуем, что уж. Замотивировался капец
>>444154
1. Лучший интерактивный курс по SQL, просто альфа и гигакурс
https://stepik.org/course/63054/promo
2. Лучший платный курс по алгоритмам и структурам данных, за 10 баксов ты получишь лучшее что есть в инторнете
https://www.udemy.com/share/104UFs3@t5q_In8OM168-skUj4LgX-LqzBjY78URALoKMXZkNxizEKx-cyuqQRBgluA_Ktnkww==/
3. Качай скиллы тут
https://leetcode.com/
https://www.codewars.com/
4. Лучший платный курс по сетям, так же за 10 баксов урвешь бриллиант и будешь флексить знаниями сетей
https://www.udemy.com/share/102fI43@Kki2S58Qt2QoBsuWPOFTWsxlimHrp7ajsFi0eOQJdK3v2hA3gda5wXbbTxh-4iZs0Q==/
5. Это твоя шпаргалка, мантра и библия по вопросам на собесе по джабе. Распечатай и каждое утро от корки до корки читай, потом
Le maman проси чтобы тебя гоняла по вопросам от туда
https://github.com/enhorse/java-interview#java-core
6. Следующие книги из пикрил купи/спизди_из_торрента и тоже от корки до корки читай
Совет, начни с джабы, пиши код пока эксепшоны из попы не полезут, задачки дрочи, пиши круд хуйню, потом выдашь за год опыта. Попыхтишь год а потом с легко и просто перекинешься на GOvno.
ВНИМАНИЕ НАХОЙ! МОЙ СОВЕТ ИМХО БЛЯТБ, НЕ ПРЕТЕНДУЕТ НА ИСТОЧНИК ПОСЛЕДНЕЙ ИНСТАНЦИИ
>Попыхтишь год а потом с легко и просто перекинешься на GOvno
А в чем смысл писать год на жабе, когда можно писать год на го? Правда на жабе мне писать всегда было почему-то легче, видимо из-за того, что большую часть своей жизни программировал на C/С++, шарпе и жабе. Ну и питоне немного.
здоровый кеш(мапка, ключ стринг, значения массивы интов , наполнение в несколько параллельных потоков, памяти жрет гиг, по рсс 15. И так ебался, чтобы понизить (было ~5\30 до), как рсс чистить ( ну или не зохавывать)?
аллокейт? но там не очень понятны размеры элементов(он 1 до 60к вполне себе). Есть еще идеи?
Я не он, но выскажусь.
Год на жабе, а потом год на го наверное особо смысла нет.
Но джава для новичков мне кажется поперспективнее будет, просто больше вакансий, больше инфы в интернете, всё такое.
Опять же в го нет больших фреймворков и соответственно нужно выстраивать всю архитектуру самому и с нуля, а какая может быть архитектура у новичка? Он охуеет и всё, и ничему не научится.
Так что имхо начинать с джавы будет покомфортнее, года так 2, может 4 на ней посидеть, прокачаться до хорошего уровня, а уже потом решать, какой язык тебе больше нравится и туда перекатываться. Нравится го - в го, нравится функциональщина - в скалу или хаскель, нравятся мужчины - в js и тп.
> что большую часть своей жизни программировал на шарпе и жабе
> а жабе мне писать всегда было почему-то легче
Почему бы это :) Конечно, со временем идиоматика языка настолько сильно заползает в подкорку, что вообще перестаешь думать о языке, просто на рефлексах хуячишь код и всё.
>>444214
Ты особо ничего не пояснил, кроме того, что у тебя мапа и что оно много памяти жрет. Хоть бы код показал, что ли, что за элементы, сколько их в мапе, с какой скоростью наполняются, экспайрятся они у тебя из мапы или нет.
Из банальных советов, возможно ты постоянно при наполнении мапы превышаешь её капасити и в итоге она постоянно у тебя переаллоцируется, ну там 10=>20=>40=>80=>160 элементов.
Попробуй хотя бы сразу же аллоцировать мапу на 100500 элементов.
Далее, померяй runtime.Memstats, лучше всего несколько раз, чтобы было видно, что там растет. Может получится так, что го видит, что ты чёт в этом коде имеешь привычку дохуя памяти выделять и поэтому на всякий случай не освобождает старую память, предполагая, что она тебе ещё понадобится.
А вот так вообще их все минут по 15-20 запускает. Нужно больше ОЗУ или поставить го не через снап?
> Может получится так, что го видит, что ты чёт в этом коде имеешь привычку дохуя памяти выделять и поэтому на всякий случай не освобождает старую память, предполагая, что она тебе ещё понадобится.
а может ты и прав вот тут, кстати
сконпелируй один раз и запускай сколько хочеш. почему go run?
import "fmt"
func main() {
fmt.Println("hello world")
}
Я уже могу претендовать на 300к? Что дальше?
> Я уже могу претендовать на 300к?
В год разве что.
Напиши какой-нибудь n-body simulator например, что-то низкоуровневое и параллельное типа компрессора какого (архиватора), или всё-таки соберись и наваяй бэк для некоего веб приложения с бд, что-нибудь базовое уровня магазина, доски объявлений или даже ссаного туду-листа. Ваять полное приложение вместе с фронтом не предлагаю, т.к. ты же не на фуллстека претендуешь, а в го наверное не получится быстро-быстро наговнякать с какими-нибудь шаблонизаторами веб-морду, как это можно например в джаве с thymeleaf, поэтому весь фронт можно опустить, если только ты не собираешься прям что-то реальное делать для людей.
И кстати ты мог это без fmt сделать, просто информирую что в гохе ещё и встроенный в язык println есть (но юзать его конечно не надо)
>>445750
Не слушай этого мудака, какой ещё нахуй n-body simulator, на тебя там все как на идиота посмотрят и спросят, ебанутый ты или да а ты и да, не рассказывать же на собесе, что послушался совета на двачах.
Го это на 99% язык для системных и околосетевых приблуд, докеров, сервисов, веб-сервисов, банкинга, недо-бд и так далее и тому подобное.
Поэтому для начала сделай простенький веб-бэкенд, чтобы получать запросики и сохранять их в бд и обратно. Хотя бы.
Потом попробуй поверх какую-нибудь бизнес-логику накрутить, например написать сервис-сокращатель ссылок, а лучше что-нибудь с фоновой работой, скажем сервис-скриншотер, чтобы ты ему скармливал url, он в фоне делал скриншот через https://github.com/valeriangalliat/webshot-cli к примеру и потом мог тебе его отдавать по апи.
Обязательно предусмотри там развертку базы, накат миграций туда и всё такое, желательно через докер, так и так потом столкнешься с такими задачами.
Добра.
Мудак это твой батя-хуесос, ты до конца хотя бы предложение дочитал прежде чем мне что-то отвечать?
Заебатые курсы, то что надо, тонны нефти тебе
Если твоё предложение на 80% состоит из говна, то я могу спокойно назвать его говном, не вдаваясь в детали.
Не понимаю, почему обычно не пользуются встроенным println. Ради сохранения стиля? Или тут есть подводные?
Ну если моё предложение состоит из говна, то придётся признать, что из него же состоит твоё, потому что 80% моего предложения ты просто продублировал.
Ну а предметно - в чём твоя проблема с даже этой частью предложения, что тебя прям разорвало и все кругом мудаки и смотреть будут как на мудака ага и прочее? Что конкретно не понравилось?
>>445864
По-моему поддержка встроенного принта не гарантируется, его могут выпилить в будущих версиях, и оставили для возможности что-то ыбстро написать, не затягивая зависимости.
> Напиши какой-нибудь n-body simulator например, что-то низкоуровневое и параллельное типа компрессора какого (архиватора)
Нот это.
Ты первыми же словами советуешь новичку написать что-то за пределами предметной области языка (кто вообще симуляции на го пишет? кому это надо?), а также что-то низкоуровневое (новичку? низкоуровневое? ему бы с концепциями языка попрактиковаться, а не байтики дрочить). Не говоря уже про архиваторы, в которых специфики языка ровно ноль, код +- одинаково везде будет выглядеть.
Специфика языка го новичка сразу отвратит от языка го.
Ща бы на новичковый порносайт нарожать 100500 микросервисов и оркестрировать их в кубере, мммм
>специфики языка ровно ноль, код +- одинаково везде будет выглядеть
Тут-то специфики ровно столько же, но тебя не смущает.
если да, то что в разработке на го такого, что требует опыт на других стеках?
>насколько правдивы слова что без опыта работы на го работу не найти?
Абсолютно правдивы
>если да, то что в разработке на го такого, что требует опыт на других стеках?
А хуй его знает, рыночег так решил, легче просто мозг не ебать и с джабы начать, как я это сделал. Но бля, после 3 месяцев писанины на ГО, писанина на джабе это одна большая боль, мне пиздец таки как плохо, ментально и физически, просто выть хочется...
Опыт работы на фрилансе учитыватеся кстати?
Классы и их виды, чем абстрактный класс отличается от обычного а чем от интерфейса, как они работают, где они доступны, как их наследовать, что в них должно быть, какая область действия полей класса, назови класс от которого все наследуются, нахуя они от него наследуются, какие методы есть у этого класса.
Что такое конструктор, какие виды конструктора бывают, какие модификаторы доступа к ним можно применить, где их использовать, можно ли использовать больше чем один конструктор.
Что такое методы, чем методы отличаются от функций, может ли быть методы у интерфейса, а у абстрактного класса, какие модификаторы доступа к ним можно применить, а можно ли класс внутри метода создать, а что будет если объявить метод static, а что будет если метод объявить final.
Что такое объект, как создавать объект, где хранится объект, как сравнивать объекты, жизненный цикл объекта, можно ли создать объект от интерфейса, а от абстрактного класса, а что будет если поля класса объявить static, а если final.
Расскажи про классы в пакете util, math, lang, object, net, nio, time, security.
И все что я тебе расписал это даже не начало, это даже не джава мать его CORE. Это 1/3 СУКА!
Я за столько слов мог бы по кишкам гохи пройтись, прям до того момента как там GC работает БЛЯТЬ!
> Классы и их виды, чем абстрактный класс отличается от обычного а чем от интерфейса, как они работают, где они доступны, как их наследовать, что в них должно быть, какая область действия полей класса, назови класс от которого все наследуются, нахуя они от него наследуются, какие методы есть у этого класса.
> Что такое конструктор, какие виды конструктора бывают, какие модификаторы доступа к ним можно применить, где их использовать, можно ли использовать больше чем один конструктор.
> Что такое методы, чем методы отличаются от функций, может ли быть методы у интерфейса, а у абстрактного класса, какие модификаторы доступа к ним можно применить, а можно ли класс внутри метода создать, а что будет если объявить метод static, а что будет если метод объявить final.
> Что такое объект, как создавать объект, где хранится объект, как сравнивать объекты, жизненный цикл объекта, можно ли создать объект от интерфейса, а от абстрактного класса, а что будет если поля класса объявить static, а если final.
> Расскажи про классы в пакете util, math, lang, object, net, nio, time, security.
Ну ты сейчас мегапиздатые вещи перечислил.
>И все что я тебе расписал это даже не начало, это даже не джава мать его CORE. Это 1/3 СУКА!
А вот это да, уже не так здорово
мимо вкатывался в жабу, но сдался после кора. Но жаву всё равно люблю
Вот вы понимаете что это уже не язык а ОТДЕЛЬНО НАПРАВЛЕНИЕ, ЭТО НАУКА, КАК СУКА ДЖУН СТОЛЬКО ХУЙНИ ДОЛЖЕН ЗНАТЬ БЛЯЯЯЯТЬ
Вот неужели джависты так любят это болото, чем им гошка не угодила, дженериками? Они ебнулись? Дженерики на эту залупу променяли, пизда у меня очко горит...
Я в рот ебал тот рынок который диктует вместо няшной гохи жирную скуфидонскую джабу...
Жава топ когда тебе нужна жирная библиотека чтобы решать задачи бизнеса не отвлекаясь на велосипеды. Я тут вполне могу понять, когда в го мне предлагают самому манипуляции слайсами повелосипедить (но тем не менее у го есть свои плюсы не c++)
>>446561
Дык дженерики же теперь есть? Ну а кроме дженериков, всё что анон выше перечислил, типа это хуёво - на самом деле охуенно. Ты так или иначе на большом проекте будешь всё это переизобретать, но в чём удобен го - на нём можно делать маленькие и независимые куски говна, поэтому ему не так сильно нужно всё то, что нужно большому жирному монолиту.
>Жава топ когда тебе нужна жирная библиотека чтобы решать задачи бизнеса не отвлекаясь на велосипеды.
А что умеет джаба чего не умеет гошка? Мне это интересно
Бля, брейнфак - тьюринг-полный язык, и на этом остановимся.
Так это вроде не сильно сложные концепции, любой учебник по джаве в первых главах подробно все рассказывает, и при этом по сравнению с С++ здесь все в разы проще.
Основные минусы жабы имхо это большое потребление памяти, ну и спринг фреймворк довольно жирный, тяжелый и с тонной магии под капотом.
>>446561
>КАК СУКА ДЖУН СТОЛЬКО ХУЙНИ ДОЛЖЕН ЗНАТЬ БЛЯЯЯЯТЬ
То, что он перечислил, это немного совсем. Туда еще нужно накинуть коллекции, стримы и многопоточку. Многопоточка будет сложнее и объемнее всего остального. И это уже можно будет назвать Java Core.
>>446563
Java и Go для разных задач были придуманы, так что рынок будет тебе диктовать именно то, что нужно в данной отрасли.
>>446577
>А что умеет джаба чего не умеет гошка
Ну как минимум в Го все еще нет полноценных дженериков с эксепшонами, но на это в целом похуй.
Также нет стримов и какого-то намека на нормальный синтаксис функциональщины, те же лямбды например, это самое печальное. имхо. Конечно все это циклами заменяется, но появляется больше бойлерплейта имхо.
Рекомпайл при изменениях довольно легко кстати настраивается.
Но особо он в го и не нужен, го и так компилируется примерно мгновенно, обычно цикл всё же такой, что ты несколько минут программируешь, потом нажимаешь Run и сразу же проверяешь результат. Оптимизация тут только в том, что Run нажимать не придется.
>>446552
При том, что джава действительно концептуально жирнее и волшебнее го, ты своим постом только продемонстрировал свой невысокий уровень, лол. На это всё может любой чел после полугода разработки на возможно любом ООП языке программирования.
> Что такое конструктор и какие виды бывают?
Это вызывает у тебя сложности, серьезно? А покакать у тебя сложностей не вызывает?
>>446561
Это не сложности, а так, цветочки. Подобного рода вещи можно вообще в любом языке наскрести, включая го. Те же слайсы - то ещё минное поле, особенно если начать корнер кейсы спрашивать.
Вообще очень забавно, как джуны хуеют с просто элементарной хуйни, которую даже учить не надо, она блин интуитивная.
Такое ощущение, что они ожидали, что придут в офис, им сразу по приходу 500наносеков отсыпят и всё, никаких требований не будет. Ну нет ребята, много платят за то, что имеет ценность, например высокую квалификацию.
Единственное, что оправдывает джунов-долбоебов, это то, что в универах их на айти специальностях учат в пейнте рисовать и код на паскале в тетрадке писать. А потом оказывается, что в реальном мире надо что-то знать и уметь, удивительно.
И да, все эти приколы с которых вы хуеете, придуманы не просто так, а для того, чтобы решать специфические задачи. И если вам кажется, что в го такого нет, то это просто означает, что у вас нет инструментов для решения этих задач и когда вы с такой задачей столкнетесь, вам будет больно.
В том числе поэтому я очень иронично отношусь к высказываниям типа "го - хороший язык для новичков". Может быть, первоначальной инфы за счет простоты языка и меньше, только вот в таком случае сложность переносится с языка и тулчейна на плечи программиста, о чём все почему-то недоговаривают.
>>446776
> Ну как минимум в Го все еще нет полноценных дженериков
Да уже почти есть, даже текущая реализация закрывает большинство юзкейзов.
> с эксепшонами
Спорная штука. Раньше я тоже топил за эксепшоны, но теперь, став старше и умнее, я пришел к выводу, что всё же приятнее всего видеть это дело в сигнатуре функции в виде значений.
Или как зиг делает: https://ziglang.org/documentation/master/#Error-Set-Type
(там вообще крутота, функция возвращает юнион возможных ошибок)
Или вообще в монадическом стиле.
Единственное что в го без нормального вывода типов на уровне языка полностью раскрыть потенциал таких подходов не получится.
> Также нет стримов и какого-то намека на нормальный синтаксис функциональщины, те же лямбды например, это самое печальное. имхо. Конечно все это циклами заменяется, но появляется больше бойлерплейта имхо.
Плюсану. Но вообще сейчас хотя бы дженерик библиотеки можно будет писать для этого дела. В /exp/ вообще добавили slices и maps, до стримов всего ничего осталось.
Тут основная проблема - это сами гошники, многие из них знатные консерваторы и просто лютой ненавистью ненавидят функциональщину. Причем это сродни религии у них =/
Рекомпайл при изменениях довольно легко кстати настраивается.
Но особо он в го и не нужен, го и так компилируется примерно мгновенно, обычно цикл всё же такой, что ты несколько минут программируешь, потом нажимаешь Run и сразу же проверяешь результат. Оптимизация тут только в том, что Run нажимать не придется.
>>446552
При том, что джава действительно концептуально жирнее и волшебнее го, ты своим постом только продемонстрировал свой невысокий уровень, лол. На это всё может любой чел после полугода разработки на возможно любом ООП языке программирования.
> Что такое конструктор и какие виды бывают?
Это вызывает у тебя сложности, серьезно? А покакать у тебя сложностей не вызывает?
>>446561
Это не сложности, а так, цветочки. Подобного рода вещи можно вообще в любом языке наскрести, включая го. Те же слайсы - то ещё минное поле, особенно если начать корнер кейсы спрашивать.
Вообще очень забавно, как джуны хуеют с просто элементарной хуйни, которую даже учить не надо, она блин интуитивная.
Такое ощущение, что они ожидали, что придут в офис, им сразу по приходу 500наносеков отсыпят и всё, никаких требований не будет. Ну нет ребята, много платят за то, что имеет ценность, например высокую квалификацию.
Единственное, что оправдывает джунов-долбоебов, это то, что в универах их на айти специальностях учат в пейнте рисовать и код на паскале в тетрадке писать. А потом оказывается, что в реальном мире надо что-то знать и уметь, удивительно.
И да, все эти приколы с которых вы хуеете, придуманы не просто так, а для того, чтобы решать специфические задачи. И если вам кажется, что в го такого нет, то это просто означает, что у вас нет инструментов для решения этих задач и когда вы с такой задачей столкнетесь, вам будет больно.
В том числе поэтому я очень иронично отношусь к высказываниям типа "го - хороший язык для новичков". Может быть, первоначальной инфы за счет простоты языка и меньше, только вот в таком случае сложность переносится с языка и тулчейна на плечи программиста, о чём все почему-то недоговаривают.
>>446776
> Ну как минимум в Го все еще нет полноценных дженериков
Да уже почти есть, даже текущая реализация закрывает большинство юзкейзов.
> с эксепшонами
Спорная штука. Раньше я тоже топил за эксепшоны, но теперь, став старше и умнее, я пришел к выводу, что всё же приятнее всего видеть это дело в сигнатуре функции в виде значений.
Или как зиг делает: https://ziglang.org/documentation/master/#Error-Set-Type
(там вообще крутота, функция возвращает юнион возможных ошибок)
Или вообще в монадическом стиле.
Единственное что в го без нормального вывода типов на уровне языка полностью раскрыть потенциал таких подходов не получится.
> Также нет стримов и какого-то намека на нормальный синтаксис функциональщины, те же лямбды например, это самое печальное. имхо. Конечно все это циклами заменяется, но появляется больше бойлерплейта имхо.
Плюсану. Но вообще сейчас хотя бы дженерик библиотеки можно будет писать для этого дела. В /exp/ вообще добавили slices и maps, до стримов всего ничего осталось.
Тут основная проблема - это сами гошники, многие из них знатные консерваторы и просто лютой ненавистью ненавидят функциональщину. Причем это сродни религии у них =/
> Вообще очень забавно, как джуны хуеют с просто элементарной хуйни, которую даже учить не надо, она блин интуитивная.
> Такое ощущение, что они ожидали, что придут в офис, им сразу по приходу 500наносеков отсыпят и всё, никаких требований не будет. Ну нет ребята, много платят за то, что имеет ценность, например высокую квалификацию.
Ещё мне ну очень любопытно было бы послушать >>446561 когда он поймет, что ему ещё нужно знать SQL со всеми его приколами от джоинов до оконных функций, индексы, b-tree и вот это всё, ещё архитектура приложений, а ещё и бд опять же, а потом ещё выяснится, что код так просто не попишешь, есть разные стили, а ещё и алгоритмы надо знать, и не стеки-очереди, а даже и посложнее иногда встречается. А потом ещё и окажется, что ОС надо знать, чтобы понимать, что на графиках memstat видишь. А потом ещё и сети, протоколы, http1/2, protobuf, grpc.. Балансировки всяческие ещё. И это только вообще самое начало, на +-джуна.
Это блять оказывается наука, это наше IT, это не тупо на кнопки давить, тут думать надо.
>Классы и их виды, чем абстрактный класс отличается от обычного а чем от интерфейса, как они работают, где они доступны, как их наследовать, что в них должно быть, какая область действия полей класса, назови класс от которого все наследуются, нахуя они от него наследуются, какие методы есть у этого класса.
Каждый раз охуеваю с жабьего кода, сука эти наследования напоминают библейские родословные. Ладно хуй с ним эти классы что-то бы делали полезное, большинство тупо нахуй не нужны и еще не просто так создаешь в конструкторе класс, нет нихуя это слишком просто, а ты берешь и вызываешь фабрику фабрик, которая дает фабрику и та фабрика создает экземпляр класса. Сука пиздец какой-то, вот оттуда и появляются долбоебы типа Бугаенко
> вот на питониста начнут по синтаксису гонять, а потом попросят пару алгоритмов накидать или рефакторить какой-то код
Значит, херовый собес на питониста будет, ну или на новичка совсем.
Синтаксис это совсем база, нет смысла спрашивать, подразумевается, что её все знают.
На любом собесе на любом языке спрашивают в первую очередь специфику языка, то есть особенности работы языка, его сборки мусора, компиляции (если есть), системы типов и тд и тп.
Отдельно обычно идет разговор об архитектуре приложений и особенностях её реализации на конкретном языке, если такие есть.
Если в языке есть какие-то суперпопулярные пакеты типа спринга в джаве, то можно поговорить про них.
И отдельно тулчейн, то есть, значет ли чел сети, знает ли чел базы данных и тд и тп.
Я когда спрашиваю, обычно экзамен не устраиваю, но на каждую тему хотя бы вскользь пару вопросов вбрасываю, чтобы понять, разбирается кандидат в этой теме или нет.
Соответственно, на го жди вопросов про горутины, планировщик, гц, реализации слайсов, мап и строк под капотом, а также систему типов и то, что из неё выходит.
Глубина вопросов очевидно зависит от позиции, на которую подаешься.
А вообще вопрос конечно платиновый, каждую неделю тут его задают по-моему.
>>447253
Нахуя, JWT это свойство авторизации, а не объекта и идет обычно заголовком. А если потом захочешь авторизацию изменить или что-то в этом духе? Короче, читай из заголовка, проверяй в middleware (или вообще на уровне api gateway в кубере и не тащи в код), а основной код об этой хуйне знать не должен. Если основной код должен полагаться на какие-то данные из JWT, то в том же middleware их из этого jwt доставай и клади в context.WithValue, потом в бизнес-коде достанешь и проверишь.
>>447397
Значит, привык мыслить в функциональной парадигме, ничего страшного. В любом случае дело привычки и решается просто практикой.
>>447249
Так-то я с тобой согласен, только хочу заметить, что абстрактные фабрики фабрик - это чисто джавовое явление, в других языках так не принято. Поэтому джавовый дизайн кода действительно на любителя.
> вот на питониста начнут по синтаксису гонять, а потом попросят пару алгоритмов накидать или рефакторить какой-то код
Значит, херовый собес на питониста будет, ну или на новичка совсем.
Синтаксис это совсем база, нет смысла спрашивать, подразумевается, что её все знают.
На любом собесе на любом языке спрашивают в первую очередь специфику языка, то есть особенности работы языка, его сборки мусора, компиляции (если есть), системы типов и тд и тп.
Отдельно обычно идет разговор об архитектуре приложений и особенностях её реализации на конкретном языке, если такие есть.
Если в языке есть какие-то суперпопулярные пакеты типа спринга в джаве, то можно поговорить про них.
И отдельно тулчейн, то есть, значет ли чел сети, знает ли чел базы данных и тд и тп.
Я когда спрашиваю, обычно экзамен не устраиваю, но на каждую тему хотя бы вскользь пару вопросов вбрасываю, чтобы понять, разбирается кандидат в этой теме или нет.
Соответственно, на го жди вопросов про горутины, планировщик, гц, реализации слайсов, мап и строк под капотом, а также систему типов и то, что из неё выходит.
Глубина вопросов очевидно зависит от позиции, на которую подаешься.
А вообще вопрос конечно платиновый, каждую неделю тут его задают по-моему.
>>447253
Нахуя, JWT это свойство авторизации, а не объекта и идет обычно заголовком. А если потом захочешь авторизацию изменить или что-то в этом духе? Короче, читай из заголовка, проверяй в middleware (или вообще на уровне api gateway в кубере и не тащи в код), а основной код об этой хуйне знать не должен. Если основной код должен полагаться на какие-то данные из JWT, то в том же middleware их из этого jwt доставай и клади в context.WithValue, потом в бизнес-коде достанешь и проверишь.
>>447397
Значит, привык мыслить в функциональной парадигме, ничего страшного. В любом случае дело привычки и решается просто практикой.
>>447249
Так-то я с тобой согласен, только хочу заметить, что абстрактные фабрики фабрик - это чисто джавовое явление, в других языках так не принято. Поэтому джавовый дизайн кода действительно на любителя.
1) Как ощущения? Можно? Стоит? Привыкание есть
2) Че по фреймворкам? Че у вас Ларавель?
Чел, в Джаве магии как раз мало. Дохуя бойлерплейта, все очень вербоузно. Без ИДЕ на джаве работать вообще невозможно.
Как думаешь почему интележ беслпатный а голанд платный? Потому что на Джаве ИДЕ это базовые права человека
> 1) Как ощущения? Можно? Стоит? Привыкание есть
Норм, но это совсем не пхп, так что придется привыкать. Лично мне нравится больше мощи (тм) под капотом, и меньше приседаний с процесс менеджерами и прочим. И магии ещё меньше в го.
> 2) Че по фреймворкам? Че у вас Ларавель?
А это самое вкусное, в го нет фрейморков. Ты берешь отдельно маленькие либы типа роутеров, клиентов для базы, логгеров и прочих и сам собираешь из них себе сервис. Получается очень козырно, но для привыкших хуячить одинаковые проекты php'ников "на фреймворках" ужасно непривычно первое время. Ну и джависты со спринга понятно тоже страдают.
>>447527
Джава супер волшебная, как раз потому, что у вас там постоянно классы подменяются, декораторы декорируются, аннотации добавляют дополнительную гигабайтную функциональность и что ни пакет - то операционная система в миниатюре с 10 разными логгерами одновременно. В го всего этого нет.
> Как думаешь почему интележ беслпатный
Ну давай не забывать, что поддержки спренга в бесплатной версии нет.
Хотя конечно в го ещё хуже - там вообще нет нормальной бесплатной иде. Отчасти компенсируется тем, что в го не нужно столько автокомплита, сколько в жабе, в итоге выходят примерно равные условия.
>Ну давай не забывать, что поддержки спренга в бесплатной версии нет.
Хочу подметить анончик, что бесплатную версию в основном куашники которые на джабе пишут. Сам сотрудник одной из самых больших галер в РФ, все банки по умолчанию юзают бесплатную идею для автотестов на джабе
Вопрос без троллинга если чё, я так понимаю что основные фичи в сравнении с сями это гц и многопоточность из коробки, куда ж без неё.
В остальном больше сходств, чем различий (да синтаксис - смесь сей и питона, но синтаксис не важен).
Ты на си хоть раз что-нибудь писал больше калькулятора?
Ебля с хедер файлами.
Хуевая типизация(смотри пикчу, обрати внимания на параметры компилятора).
Полиморфизм через указатели на войд.
Многопоточность делается через pthread'ы и ебучие mutex'ы
Конст работает пиздец неочивидно.
Нет никаких средств удобных типа деструкторов или defer, дебаг освобождения ресурсов.
Столько способов себе ногу прострелить что я ебал.
upd: Про работу со строками в сях чет слышал?)))
Спасибо за совет. Хочу переходить на го так как сейчас чувствую ЕБЛЮ с пыхой. Типа я работаю в финтехе и там сложная платяорма с обработкой платежей, хайлоад-хуеад. Почему изначально на пыхе решили делать - хуй знает.
Не выёбывайся плиз, я всё что ты перечислил знаю, и сверх того, но нахуя мне каждый пук уровня "ебля с хедер файлами" выносить как отдельный тезис, если можно обозначить действительно важное и всеобъемлющее?
В го тоже хватает странного (именно нового странного), я об iota помню сходу голову сломал.
Ну важное и всеобъемлющее это то что Си это старый язык где очень трудойомкая конфигурация, мейкфайлы это лютая залупа, работа с зависимостями совсем не pip install
Работа с юникодом в го из коробки. Работа с датами из коробки.
>трудойомкая конфигурация, мейкфайлы
>Работа с юникодом. Работа с датами
Ну я просто вот это не считаю настолько важным, чтоб под это новый язык пилить.
А вот удобная многопоточка и гц - это да.
В го баланс смещен в сторону простоты и системы типов, и экосистемы. Иногда с моей точки зрения с этим перебарщивают, но в целом направление вполне понятное.
Вот тебе схема, точку, которая тебе нравится, можешь выбрать сам:
"Просто, но всё нужно делать руками" <--> Go <--> Java <--> "Всё автоматизировано, но нихуя непонятно, потому что пиздец как сложно из-за кучи абстракций"
В го есть здравые моменты, например имхо утиная типизация через интерфейсы + структуры это более удачный вариант, чем джавовые цепочки наследований от абстрактных классов.
Или к примеру гошные подходы к построению библиотек, мне они нравятся гораздо больше. Чем сразу ставить себе комбайн, я лучше соберу более адаптированное решение под мой кейс по частям.
Но конечно и всякой хуйни в го тоже навалом, как обычно, что-то хорошо, что-то плохо.
>>447631
Ебля есть везде, серебряной пули не бывает. Но после php го кажется глотком свежего воздуха прям, это подкупает.
Конечно, вашего хуектора-архитектора за саму идею писать процессинг платежей на php стоило бы прилюдно высмеять и провести голышом по столице. Явно знатный долбоеб.
Пыха как язык-то норм, но для веб-сайтов в первую очередь. Кто ж на нём будет платежи писать, язык на это и не заточен совсем =/
На самом деле вполне неплохо выходит. Во-первых там есть интеграции, во-вторых в принципе пыха подходит для всего что работает на сервере без проблем. Просто экосистему надо знать. У нас легази-хуйня тянулась с 2009ого, тогда была пыха выбрана по причине наличия людей.
Дальше в 2020ом была поставленна цель ВСЕ ПЕРЕПИСАТЬ и решили мову оставить, так как команда есть)
На самом деле вполне неплохо выходит. Во-первых там есть интеграции, во-вторых в принципе пыха подходит для всего что работает на сервере без проблем. Просто экосистему надо знать. У нас легази-хуйня тянулась с 2009ого, тогда была пыха выбрана по причине наличия людей.
Дальше в 2020ом была поставленна цель ВСЕ ПЕРЕПИСАТЬ и решили мову оставить, так как команда есть)
Да конечно на чем угодно можно написать что угодно и если нормально программировать, то оно даже будет нормально работать.
Но у меня, так получилось, есть обширный опыт программирования и на php и на go. На втором если честно мне приятнее делать почти всё. Особенно обработка данных, работа с очередями, потоки.
Всё-таки очень чувствуется, что пыха как была, так и есть заточена на то, чтобы принять запрос, отдать веб страницу, а всё остальное для неё не очень родное.
>за пределами предметной области языка
Какова предметная область языка го?
И на каком языке следует писать симуляцию?
Перекатываюсь из 1с бекенда, мои шансы и на что больше всего обратить внимание? Опыт где-то год, зп 100к инбифо нахуя сидел бы дальше.
> Какова предметная область языка го?
Веб, сетевые сервисы, инфраструктура, утилиты. Всё остальное писать можно, но будет в разы больнее.
> И на каком языке следует писать симуляцию?
А на каких языках пишут физические движки? C++ наверное. Может ещё Js, если ты извращенец и хочешь запускать всё в браузере.
>>449053
Шансов около нуля, скорее всего ты не знаешь вообще нихуя. Претензия если что не к тебе лично, а к 1с.
А вообще, то как обычно для новчика. Из инфраструктуры, знать сети хотя бы на уровне что такое http, заголовоки и разница между get/post/put, уметь в postgres/mysql хотя бы на уровне создать таблицу и сделать CRUDы в неё.
Для го знать на каком-то уровне ответы на платиновые вопросы >>447431 и уметь писать хотя бы простенькие API. Пройди go tour хотя бы.
Дальше начнешь ходить по собесам и делать тестовые, знатно поешь говна, но с каждым разом будешь ликвидировать пробелы в знаниях и рано или поздно всё получится.
Хотя я бы на твоём месте привирал и говорил, что работал не на 1C, а на php wordpress каком-нибудь.
это всё не только к го относится, если что, универсальный ответ про любой язык, на который захочешь перекатиться
>скорее всего ты не знаешь вообще нихуя. Претензия если что не к тебе лично, а к 1с
Это ожидаемо, я близко к сердцу не приму, в курсе этих предрассудков.
>Из инфраструктуры, знать сети хотя бы на уровне что такое http, заголовоки и разница между get/post/put, уметь в postgres/mysql хотя бы на уровне создать таблицу и сделать CRUDы в неё.
Чёто довольно просто, понял-принял, спасибо за воодушевление, щас наваяю некий простой сервер с рест апи. В ормы лезть стоит или их в го никто не юзает? В голом sql нормально себя чувствую, если что ("скорее всего ты не знаешь вообще нихуя" - было бы неясно как бы мы без этого апи писали для вебсайта и моб приложений, я ж говорю бекенд)
>Хотя я бы на твоём месте привирал и говорил
Эйчарке соврать и написать должность просто "программист" (как собсна у меня и написано) это святое дело, техническому интервьюеру врать смысла не вижу, во первых про пыху могут и спросить, а во-вторых если там какой-то фанатик с предрассудками против 1с (что маловероятно), то нам один хуй комфортно вместе работать не будет (мало ли какие ещё помимо этого загоны у чела могут быть).
> В ормы лезть стоит или их в го никто не юзает?
Просто описывай интерфейс type Users interface {}, а в реализации пихай или голые запросы, или собирай их через squirrel какой-нибудь.
Орм"ки в целом есть, но их почти не используют, потому что до недавнего времени без дженериков и аннотации они были очень уж волшебными либо кодогенеративными. Самая популярная это Gorm, она эже и самая херовая.
> было бы неясно как бы мы без этого апи писали для вебсайта и моб приложений, я ж говорю бекенд
Хз, если у тебя там битрикс, то есть CRM, скорее всего это комбайн, который много что пусть и плохо, но делает за тебя. К примеру, если тебя на собесе спросят про накат миграций ты скорее всего даже не поймешь о чём речь.
> техническому интервьюеру врать смысла не вижу
Готовь в любом случае легитимный ответ на вопрос, почему захотел перекатиться.
>Хз, если у тебя там битрикс, то есть CRM, скорее всего это комбайн
Не, мы как раз ебёмся по хардкору, всё делаем руками - ловим запросы, анмаршаллим, смотрим что там за операция и переключаем на нужную ветку логики, комбайн у нас на совсем другой стороне - на стороне работы внутренних сотрудников, вот у них есть коробочный интерфейс для взаимодействия с системой, а у нас голый хттп и апи в свагере.
В целом я нахожу это похожим на гоху, но хуже - динамикодрисня, нет интерфейсов, не особо гибкая инкапсуляция (хотя стоп - в го примерно то же самое). В целом бэк на таком довольно неприятно писать - везде бесконечно проверяешь типы. И кстати с другой стороны сидят пыхеры, которые тоже в похожей ситуации, и когда мы после одного фейла на проде, связанного с типами, мы предложили им валидировать типы руками, они сильно заскрипели зубами, осознавая с одной стороны, сколько бойлерплейта сейчас придётся ливануть в кодобазу, а с другой - что без этого всё же никак.
>К примеру, если тебя на собесе спросят про накат миграций ты скорее всего даже не поймешь о чём речь.
Это когда меняется структура таблиц, и данные надо перезалить в новый формат. Обычно долго. В 1с другой термин, но суть одна.
>Готовь в любом случае легитимный ответ на вопрос, почему захотел перекатиться.
Выше ответил. Могу добавить - так уж получилось, что даже в рамках 1с я менял места в сторону работы с большими и большими объёмами данных. Наконец упёрся в потолок - более нагруженной системы, чем у нас - больше нигде нет в 1с. Вывод напрашивается сам собой. Я слышал - го это про хайлоад? Значит нам туда.
Как написать максимально оптимизированную по времени очередь фиксированного размера. Что требуется - добавлять в очередь новое значения одновременно выкидывая старое. Random Access не нужен, буду итерироваться по всем элементам при добавлении нового.
Какие СД приходят на ум.
1) Связный список. Тут все плюс минус понятно. Но! Нагружаем GC. И наверное
2) Эррэй по размеру данных. С точки зрения теории алгоритмов - полное говно. Получается нужно при каждом добавлении копировать значения в новый эррей со здвигом и дописывать. НО! Процессоро-делы то тоже не палкой сделанные и охуенно оптимизировали операции копирования массивов (ну, насколько я слышал). Возможно такой вариант будет быстрее. Да и итерироваться по массиву думаю быстрее в машинных кодах, чем по указателям связного списка бегать туда сюда по памяти.
На память мне относительно пох. Данных не так много и спокойно можно позволить себе их хоть задвоить, хоть затроить. Главное - скорость выполнения операций.
Двойной связный список. Хранишь указатели на начало и конец.
При добавлении...
хотя стоп, я не пойму чего ты, блядь, хочешь:
Аt first I was like
>максимально оптимизированную по времени
But then
>Random Access не нужен, буду итерироваться по всем элементам при добавлении нового.
Ты уточни как часто будешь добавлять, как часто читать всю очередь, и какие элементы хочешь получать чаще других.
>Получается нужно при каждом добавлении копировать значения в новый эррей со здвигом и дописывать
А зачем? Сделал массив по числу элементов, сохранил указатель на начало очереди, при добавлении нового элемента заменяешь элемент под указателем и сдвигаешь указатель на следующий (на самом деле указатели не нужны, нужен индекс в массиве)
Читать всю очередь подряд при добавлении нового элемента.
нужно пересчитать мат формулу
Довольно таки часто, предположим что интервал добавления -> 0.
Что значит двойной? Двусвязный? Зачем, если можно просто хранить поинтеры на начало и конец.
При добавлении Last = Last.Next, First.Next = NewOne.
Но меня смущает факт, что указатели могу быть хуй пойми где в памяти разбросаны, в отличие от массива.
В прочем уже пишу бенч.
https://github.com/golang/go/issues/50183
Я вот про это.
В том-то и дело, что должно все без зависимостей cgo/gcc/g++ работать. Но видимо где-то кто-то обосрался...
или поставь то, что каждый разработчик должен иметь, либо CGO_ENABLED=0 сделай
>arr = append(arr[:1], arr[1:])
Кажется, что должен выделяться (cap х2) подкапотный массив, в который дописывается первый элемент. Все правильно?
Безотносительно задачи, просто разобраться
Двачую вопрос
b = append(b, 0)[:len(b)]
Это что за синтаксис такой? Что происходит. Вроде с Го ковыряюсь уже года полтора, нигде не видел.
Лол, я дурачек, прям перед этой строчкой комментарий:
>// Add more capacity (let append pick how much).
Но блин, какой-то реально dirty hack, как будто Сишник писал
ну это просто не сконпелируется, т.к. второй аргумент это не элемент слайса, а слайс. и вообще хз что под этим имеется в виду.
arr = append(arr[:1], arr[1]) обрезает слайс до первых двух элементов
arr = append(arr[:1], arr[1:]...) ничего не делает. ну мб одну и ту же область памяти в ту же область копирует.
arr = append(arr[1:], arr[0]) допишет первый элемент в конец и сдвинет указатель на первый элемент. если капасити не хватит, то аллоцируется новый массив. капасити нового массива это деталь имплементации и спеком не регламентируется. это не всегда х2, там помимо длины изначального массива еще паддинг с учетом размера элемента может учитываться, лучше сорц прочитать
Это я тупан, точки подразумевались, но я аргументы перепутал, конечно, должно быть так:
arr = append(arr[1:], arr[:1]...)
Ну в общем то понятно, если делать очередь таким образом, то бекинг эррей будет постоянно расти что не круто.
Может и после апенда, но точно до присвоения
Так скорее всего сишник и писал. Пол-стдлиб написано людьми с си головного мозга, там в коде черт ногу сломит. Я как-то exp/language дебажил, чуть не умер.
Хотя в этом случае их можно немного оправдать, в го нет методов для увеличения размера уже созданного слайса, то есть либо так, либо
c := make([]int, len(b)*2)
copy(c, b)
но второй вариант был бы неоптимален из-за расходов на лишнее перевыделение + копирование.
Так и остается тема с тем, чтобы добавить элемент, а потом взять всё до него. Разве что стоило бы это в 2 строки написать, чтобы люди с ума не сходили.
Вообще тут гошники конечно сами себе в ногу выстрелили. Что им мешало добавить слайсу метод extend к примеру - непонятно хотя понятно, конечно, это ж гошники, они простых путей не ищут
>но второй вариант был бы неоптимален из-за расходов на лишнее перевыделение + копирование
Так в том то и прикол, что когда мы делаем append к заполненному capacity, все равно создается новый массив и в него копируются данные.
То есть по сути, разраб не хотел хардкодить len(b)*2, а в место этого решил воспользоваться внутренней логикой расчета дополнительного капасити при экстенде слайса.
Короче блять да, легких путей не ищут и над читабельностью не парятся
Я кстати не уверен, отличается ли copy(c, b) от копирования при увеличении длины массива под капотом у слайса. Думаю, там под капотом могут быть оптимизации. А могут и не быть.
Этот вопрос повторяется каждые 10 сообщений. Как же вы заебали, ну научитесь хоть немного мотать тред перед тем, как писать свой сраный комменатрий.
Надеюсь, ОП напишет ответ на него капсом в своём следующем посте.
Бля, насколько же тебе нравится шарп, что ты наверное во всех тредах сидишь, кроме шарпотреда.
> и любители мёртвого десктопа.
Зомби из параллельного мира вещает? Десктоп живее всех живых. А миллиарды леммингов ошибаться таки МОГУТ. Что и делают, пожирая WEB-кал в промышленных масштабах.
Бля как же я тебя понимаю анончик, сам думал что этот мир наебу. Начал с го, это бля лучший язык на котором мне пришлось писать, очень приятный и логичный, но работу так и не нашел. Сейчас сижу учу джабу и как же меня она достала, это реально трижды переваренный кал говна, у меня все.
С таким гонором точно не наебёшь.
Тащемта, всё правильно. Хороших мест с хорошей зп всегда будет меньше, чем плохих и туда всегда будет трудно попасть. Хочешь преуспеть - страдай и въёбывай. Или иди к остальным неудачникам типа >>452847 работать курьером.
Так и должно быть, если вы ищете халявы, то тут её нет.
мимо-сеньор, который долгие годы въебывал ради своей 6значной долларовой зп.
Ты зарабатываешь меньше 100к $ в месяц
Работа на го это халява, или в чем твой тейк?
Пытайся попасть на стажировку в озон ну или вайлдбериз. Если никуда не возьмут, значит ты проиграл и нужно начинать учить пыху.
>Хороших мест с хорошей зп всегда будет меньше, чем плохих и туда всегда будет трудно попасть.
А можно попасть не на хорошее место, а хоть КУДА ТО??
С такой позицией никогда выше дворника не заберешься, а так - пожалуйста, миллион стремных рабочих мест, куда зайти с улицы скорее всего не очень сложно. Только язык ты тогда неправильно выбрал, на го как правило пишут в средне-крупных компаниях и стартапах. И те, и другие обычно имеют деньги и/или мотивацию что-то делать и нанимать профицитных сотрудников.
Хотя конечно озон здесь скорее исключение, из того, что я про него знаю, технологически это редкостная помойка с огромной текучкой.
Если хочешь тупую работу за копейки с низком порогом входа, посмотри лучше в сторону php, какие-нибудь местячковые аутсорсы или веб-студии на cms, вордпресс, битрикс, вот это всё. Больше средней зарплаты по региону ты на такой работен не получишь, но вкатишься довольно быстро.
>>454931
А ты в Озоне или в ВБ работал?
Какие были требования при приёме и какая зп в итоге?
Какой был опыт до этого?
Ну ты шаришь за степень унижения гей-шлюх, наверное тебе можно в этом вопросе довериться.
Чел можешь мне не докладывать подробности своей сексуальной жизни окей?
Та по сути тоже что и любой другой джун-бекендер - говнякать CRUDы в том стиле как принято в проекте, не сильно заниматься самодеятельностью, не делать совсем хуйни
Сори что так абстрактно
в вб. требования хз. вопросы типичные уровня куда having в запросе писать, чем udp от tcp отличается и из чего состоит хттп запрос. но сейчас могут и побольше дрочить. получил те самые 35к. через 2 года 250. опыта работы не было, только техническая вышка не по программированию.
Хуй его знает, как мы вообще начали обсуждать 1с в этом треде, но тем не менее.
> В 1С больше и работы, и зарплаты
Лютый пиздеж, у 1с никогда не было и не будет зарплат, сопостовимых с зарплатами нормальных разрабов на нормальных ЯП, по вполне очевидным причинам.
Достаточно посмотреть на любую статистику, увидеть среднюю зарплату 1с-шлюхи в 100к и понять, что там нет не то, что чести, знаний или самореализации, но даже и банально денег.
меньше 200к не человек
менее 300к не программист
менее 400к не сеньор
нет бога кроме зп джавистов и котлинистов, пророков её
ну или мб го, хз, вроде примерно такие же
Чел, перестань себя успокаивать, это не сговор. Я работаю рекрутером, это не какая-то сверх зарплата. Ребята с парой лет опыта устраиваются на 200-250 т.р. спокойно.
Я понимаю, что ты не можешь спокойно жить с этой информацией, так что тут либо поднимать жопу с дивана и выкидывать свой 1С, либо решить для себя, что деньги это не главное
>перестань себя успокаивать
>Я понимаю, что ты не можешь спокойно жить с этой информацией
Перестань себя успокаивать фантазиями о том, будто твои собеседники неспокойны)
Я просто попросил пруфов, ты (он или ты или любой человек, который впрягается за зарплаты в 400к в рф) его не дал. Это меня не бесит, просто немного разочаровывает. Немного, потому что я особо ни на что не надеялся. Пруфы счетов в армении с большими зп - да, были, и не раз. В рашке пока ждём.
А ничего, что у тебя там "поиск клиентов", "менеджер по оптовой продаже" и т.п.?
>нажми кнопки за меня
Да не вопрос, не вопрос: по названию резюме и фильтру от 400к в 1с четыре вакансии, а в го - пять. Охуенная разница? Охуенно ясности внесло? Давай, твоя очередь.
Приходит чел на собес.
На вопросы отвечает нормально.
- Давайте посмотрим на ваши рпоекты
- Вот ссылка - https://github.com/mikee385/GolangRayTracer
- Шо нах какой рэйтрейсер иди отсюда нахуй блядь
- Ишь чё удумал на гохе что-то помимо крудов писать
Ты подменяешь понятия. Я написал, что если чел не собирается на работе писать трассировщики лучей, то тогда ему лучше делать тестовое, похожее на работу, заодно и потренируется, да и на собесе будет больше нормальных и предметных тем для обсуждения.
>Я написал, что если чел не собирается на работе писать трассировщики лучей, то тогда ему лучше делать тестовое, похожее на работу
Немного не так
>на тебя там все как на идиота посмотрят и спросят, ебанутый ты или да
Это означает не "тогда ему лучше", а "ни в коем случае так не делать, в противном случае тебя даже рассматривать не будут". Если бы ты так и сказал, как сейчас, никто бы не стриггерился.
Ну я сгустил краски, но смысл тот же. Приди ко мне на собес чел с трассировщиком, я бы заподозрил его в байтодрочерстве и конечно спросил бы, нахуя он сделал именно трассировщик.
Для меня это очевидно странная задача, которую можно сделать по приколу, но абсолютно непонятно, в чём выгода делать это в качестве тестового проекта для показа работодателям.
>>457460
Как в питоне точно нет
> которую можно сделать по приколу, но абсолютно непонятно, в чём выгода делать это в качестве тестового проекта для показа работодателям
Ну если у работодателя не используется язык го, то очевидно незачем.
В противном случае это демонстрация твоего умения работать с языком, на который ты пришёл
Стоп, а го это разве не про то, чтобы уйти от джавы и иерархий наследования в сторону велосипедов, байтодрочерства и низкоуровневых оптимизаций, столь нужных высоконагруженным проектам?
Запрашиваю пояснительную бригаду
Кроме языка есть ещё предметная область. Немного смысла нанимать на серьезную позицию человека, к примеру, который отлично знает го, но вообще не представляет себе, что такое базы данных. Он тебе напишет full outer join где-нибудь сразу же :)
Поэтому в идеале тестовое задание должно демонстрировать твои компетенции в той области, в которой ты будешь работать, а не только в языке.
Об этом и речь.
>>457600
Да, но нет :) То есть да, уйти от джавы, меньше магии, больше байтиков, но это никак не противоречит тому, что встречаются конкретные байтодрочеры, которые делают это слишком неидиоматично даже на уровне го. Всегда важен баланс.
И поэтому естественно я захочу знать, что за человек сидит передо мной и не начнёт ли он у меня вообще все dto'шки заменять на одну общую структуру, потому что типа так быстрее будет. В го тоже существует понятие архитектуры, как бы многие долбоебы и не пропагандировали концепцию "хуячь как угодно, го это ж простой язык, он как раз для этого".
Спасибо за ответ.
Имхо трассировщик лучей как таковой не связан с понятием байтодроча, просто такая вот прикладная задача - протрассировать лучи, зачастую людям это интересно (блядь, да даже мне интересно, хотя я и не человек), но базара нет что эта задача не подразумевает взаимодействие с бд и брокерами сообщений.
Немного наверное стоит пояснить за моё отношение к петам вообще и к образованию в айти. Если в двух словах, то я за то, чтоб изучать некую технологию и тут же её закреплять в каком-то проекте, потом изучать слудующую и делать то же самое, при этом не столь важно будут ли они все в одном проекте (не стоит тратить время, чтобы придумать интересную идею проекта, где пригодятся оверходуя технологий разом - это пустая трата времени)
Трассировщик лучей там, или упомянутая выше симуляция - это проекты, призванные закрепить изучение одной технологии - языка, на котором ты их пишешь, и при этом быть достаточно сложными, чтобы пригодилось сразу много фич языка: в случае с трассировщиком там и параллельные вычисления (что очень важно для го, да и везде важно, где оно в принципе есть), и дженерики, и ещё дохуя всего.
А начнёшь ебашить сходу копию фейсбука (когда ты и язык-то толком не знаешь) - угадай что получится? "Это не для меня, я не справляюсь, ну, я пытался". По итогу конечно необходимо бекендеру иметь в загашнике именно бекенд проект, который можно показать, но и все остальные не помешают, при условии что они написаны красиво, грамотно оформлены, документированы и т.д., в противном случае их лучше сделать приватными.
Теперь задачка такая, сравни количество 1Сников и гоферов в России. Если смотреть в данном контексте разница огромна.
Как я выше сказал, я наебался с количеством вакансий в го, второй раз смотрел, там было 25 вакух на 400+, поэтому вопрос чисто из-за этого уже отпадает. В го к тому же и индекс вката крайне высок (хотя в 1с тоже немаленький), но одновременно с этим в го не джуновских вакансий, что достаточно забавно.
> этим в го нет джуновских вакансий, что достаточно забавно.
Потому что го как правило идёт вторым языком, как у людей, так и у бизнесов, сначала зачастую делается говнолит на php, который если взлетает - переписывается на golang. Ну или на джавовых проектах, им тоже зачастую проще вынести какие-то требовательные к перфомансу места на гошечку, чем тюнить jvm специально под них, тем более, что там в жаве своих приколов хватает.
В том числе поэтому я с некоторой иронией смотрю на тех, кто пытается вкатиться через го, это ну очень нетрадиционный путь. При том что гошка классная и мне самому нравится, я пишу на ней фулл тайм - всё же рандомному новичку я бы предложил начать с фреймворков и какого-нибудь java/php/js/c#/хз, что сейчас удобнее всего. А уже потом, став более или менее опытным, перекатываться на го, ради интересных задач и $$$.
>А уже потом, став более или менее опытным, перекатываться на го, ради интересных задач и $$$.
лайфак в том, что на стажерские собесы по гошке можно ходить нихуя не зная гошку, кроме го тура и параллельно пытаясь вкатиться в шарт/жаву или другую хуйню.
Ты всё прекрасно понял
Пока оно обратно совместимо с го (пока не поддерживаются дженерики, например) оно будет жить, т.к. людей которых заебывает писать if err != nil много
>индекс вката
Это довольно смешная метрика, придуманная исключительно аноном из мвп треда. Она мало о чем говорит.
Тру, на питоне и джаве решать в разы удобнее литкод, ну и собственно большая часть разборов и решений алго задач это python/java/c++, где есть нормальные коллекции. В го работа с коллекциями сделана через жопу, увы. Даже после С++ с его уебищным STL или жабы с ее полным костылей Collections Framework хочется рыдать при виде того, что в го сейчас происходит.
>>457600
>байтодрочерства и низкоуровневых оптимизаций
Это не про го, если уж прямо говорить. Го выигрывает у джавы в меньшем оверхеде по расходуемой памяти и быстрому времени старта. Пока JVM просирается и прогревается перед началом работы, скомпиленный бинарник уже начал работать. Низкоуровневые оптимизации и байтодрочерство это точно не про языки с GC в большинстве случаев.
30к стандартная зп для стажера в вб. В озоне побольше, но там уже ебут неслабо.
В авито может быть еще больше, но туда уже огромная конкуренция.
> Тру, на питоне и джаве решать в разы удобнее литкод, ну и собственно большая часть разборов и решений алго задач это python/java/c++, где есть нормальные коллекции.
Я согласен с тобой только в той части, что большая часть разборов - на других языках.
Что касается написания, имхо, там без разницы особо. В го будет немного больше из-за приседаний вокруг коллекций, отсутствия стримов и всего такого, но в целом, плюс минус одинаково всё выглядит и главное в таких задачах это всё равно сам алгоритм, а не то, как ты массив попаешь.
> Это не про го, если уж прямо говорить.
> Низкоуровневые оптимизации и байтодрочерство это точно не про языки с GC в большинстве случаев.
Да, но нет :) Безусловно, если ты хочешь писать свою бд и обмазаться оптимизациями, то тебе нужен язык с минимальным оверхедом сам по себе и поэтому гц да и вообще рантайм тебе будет только мешать.
Но при этом если сравнивать конкретно го и джаву, то го лучше джавы подходит для низкоуровневых оптимизаций, поскольку он и сам более эффективен, и ближе к железу, как язык.
Грубо говоря, для байтодрочерства C/C++ > Go > Java и имхо чел спрашивал об этом.
>>458863
> Ебать чё за треш, быстро опровергните
Хз, но в Москве на такие деньги не выжить. С другой стороны, я начинал стажёром с зп в 15к как давно это было чёрт возьми
И да, имхо, вкатуны вайтивайти с курсов ради космических зарплат должны страдать. Так что может и норм.
>Что касается написания, имхо, там без разницы особо. В го будет немного больше из-за приседаний вокруг коллекций, отсутствия стримов и всего такого
Ну хз, так то понятно что в целом все одно и то же, но тех же treemap/treeset в гошке нет, да и вообще нормальных интерфейсов у коллекций как-то нет, часть просто есть в языке вроде тех же массивов, слайсов и мап, а часть в contrainer находятся, вроде той же очереди с приоритетами.
Как-то непривычно очень работать с таким.
>>458981
>низкоуровневых оптимизаций
Ты про дергание ансейфа? В целом соглашусь, правда хз что за низкоуровневые оптимизации в гошке в среднестатистическом бекенде делают.
>Ебать чё за треш, быстро опровергните
>>458981
>Хз, но в Москве на такие деньги не выжить
Ну стажер в Яндексе на фуллтайме меньше 60 получает. В сбере 57к до налогов. Больше всех Тинькофф платит - там около 70 или даже 80 до налогов получится за фуллтайм.
Здесь же просто стажерский стандарт 35-40к платят. А смысл платить больше? Эти гошные стажировки у них идут круглогодично все время, я ни разу не видел, чтобы на хх.ру не было гошной стажировки в wb. Там похоже пачками берут вкатунов, чему-то учат, потом берут одного-двух, а остальных нахуй)
А, ну и того же сета в стандартной либе просто нет. Очевидно, что сет это всего лишь мапа с булами в значениях, но ради этого приходится городить какой-то синтаксический пиздец.
Без говностажировок ты вряд ли вкатишься в принципе, потому что джуны и стажеры в го мало кому нужны, если уж прямо говорить.
Ну и 30-60к нормальная зп для стажера, который по факту только убытки будет полгода-год приносить компании.
>Без говностажировок ты вряд ли вкатишься в принципе
Значит обойдутся без моих услуг, буду искать конторы/стеки, в которых готовы платить.
>Ну и 30-60к нормальная зп для стажера, который по факту только убытки будет полгода-год приносить компании.
Ага, охуенная история, мне-то не рассказывай, 30к для нормальной компании - пыль, у нас стажёры получают от 60к, а в целом отдел разработки - боюсь представить, если три тимлида - уже миллион.
WB не самая нормальная компания так-то на самом деле.
Ну значит у вас какой-то крупный финтех, потому то 60к платить стажеру очень мало кто готов платить. Ну или стажеров у вас называют джунами.
Из известных мне контор: дойче банк и jetbrains платили хорошо своим стажерам, но они увы свалили. Сейчас стажеру найти 80к - очень большая удача, больше выторговать вообще нигде нельзя. Зато есть неоплачиваемые стажки, и за 20, 30, 40, 50к. Это вот самое распространенное.
Что самое интересное, зп стажера никак не менялась уже лет
>>459250
>Значит обойдутся без моих услуг, буду искать конторы/стеки, в которых готовы платить
Если ты с опытом, зачем тебе идти на стажировки? Стажировки исключительно созданы для зеленых вкатунов-студентов без опыта.
Херня, ещё в 9 классе на олипмиадах по программированию такие задачи решал. Тратить на одну такую больше 20 минут это такой непрофессионализм, что можно сразу увольнять.
Мне не нужно, у них зп слишком низкая.
Озон норм мб для джунов (хотя я пару лет назад слышал, что там технически всё очень не очень) и неуверенных в себе миддлов.
Хотел сказать "да ни разу", но потом задумался, потому что если честно то сложно отделить эти навыки от других.
Конкретно такие задачи, как на скринах, почти ни разу не встречались. Но при этом периодически я сталкиваюсь с задачами, когда к примеру нужно написать обработку графа пользователей, или приходится немного колхозить какой-нибудь таск менеджер и соответственно я пишу обработку дерева задач, всё такое.
Или к примеру на работе как-то раз пришлось написать свой простенький язык выражений, чтобы менеджеры могли задавать свои условия для бизнес-логики и не дергать разработчиков, а учить менеджеров всяким регуляркам и прочим премудростям было слишком напряжно готовые либы типа expr не подходили. У меня это заняло мб вечер, простенький парсер ну и дерево выражений.
Cчитается это или нет? Хз. Для меня это тривиальщина, при этом некоторые мои друзья честно говорят, что с наскоку такого сделать не сумеют.
Так что не знаю, думаю, что этот бекграунд меня научил алгоритмическому мышлению и каким-то основам, но в чистом виде конечно опыт переборки массива не особо применим.
Но опять же такие задачи появились, только когда я начал работать в стартапах и продуктовых компаниях. Пока я работал в аутсорсах, то ничего этого мне не требовалось, просто шлёпал круды по шаблону до талого.
>Но при этом периодически я сталкиваюсь с задачами, когда к примеру нужно написать обработку графа пользователей, или приходится немного колхозить какой-нибудь таск менеджер и соответственно я пишу обработку дерева задач, всё такое.
Это да, разумеется. Правда в реальности никогда таких жёстких временных рамок нет. Даже вот как шутят в мвп треде про кабана, просящего поднажать, но в реальности никогда не нужно нажимать настолько сильно, чтобы увидеть разницу между алгодрочером и обычным человеком. В реальности время уходит в основном не непосредственно на разработку, а на согласования, созвоны, короче на менеджмент всякий.
>что с наскоку такого сделать не сумеют
Прибедняются. Одно дело когда человек даже не знает, что именно тут надо применить - тогда да, он может проебаться довольно долго. Но если ты человеку скажешь "напиши парсер сука тут нужен парсер" - он его за вечер напишет с помощью гугла. Обычно умение быстро понимать, какое решение нужно в том или ином случае - нарабатывается опытом и оплачивается отдельно.
Слабак, я на самую простую убью час, с гуглом вспоминая синтаксис питухона.
Но это если я её буду делать. А я не буду, и другим не советую. А работодателям, кто во время собеседования просит на ходу такое решать - ну смотрите сами, я бы в ебальник харкал за такое, но может где-то на мифические должности нужно это уметь делать на собесе, но судя по тому сколько в яндексах платят (а это как раз места где ебут алгоритмами) - не нужно. На моей помойной говнодолжности дотнетчика за 250к и подавно не нужно.
Когда такое в виде тестового даётся, со стандартным сроком две недели - к этому нормально отношусь, правда надо понимать, что с таким сроком будут и за говнокод спрашивать, если он будет.
> Правда в реальности никогда таких жёстких временных рамок нет.
Это другое, как и в любом спорте, в спортивном программировании нужны рамки и ограничения. В жизни конечно такого нет, нормально вылезти за требования или закидать их железом.
> В реальности время уходит в основном не непосредственно на разработку, а на согласования, созвоны, короче на менеджмент всякий.
Это в неудачных конторах. Обычно я стараюсь найти себе место, чтобы хотя бы 90% времени непосредственно писать/отлаживать код. Пока получается.
> Но если ты человеку скажешь "напиши парсер сука тут нужен парсер" - он его за вечер напишет с помощью гугла.
Ты знаешь, нет, не совсем. Если ты никогда парсеры не писал, то будешь тупить на ровном месте. А когда опыт есть, то руки сами пишут, особо не думаешь над этим.
>>460490
>А работодателям, кто во время собеседования просит на ходу такое решать - ну смотрите сами, я бы в ебальник харкал за такое, но может где-то на мифические должности нужно это уметь делать на собесе, но судя по тому сколько в яндексах платят
Яндекс-то хуета, это да. Только ты не путай собесы и яндекс. Я периодически вспоминаю свой опыт найма людей и это пиздец. На словах все просто львы толстые, а потом просишь на собесе написать fizzbuzz (если что, цикл с несколькими ифами внутри, задача без подвоха абсолютно) и "сеньоры с многолетним опытом" не могут написать не строчки.
Поэтому приходится хотя бы что-то спрашивать, чтобы понимать, что человек перед бы не на 100% врёт про свой опыт и навыки. Иначе очень много времени на каждого такого мудака уходит, начинаешь его вводить в курс дела, давать задачи - и внезапно выясняется, что он двух слов связать не может. Так и живём, приходится спрашивать что-то такое не от хорошей жизни, а как минимальное требование. Естественно это не касается долбоебов, которые прям олимпиадные задачи с литкода на собесах спрашивают я сам их без особого труда решаю, но меня они тоже бесят.
>а потом просишь на собесе написать fizzbuzz
Не, ну где физзбазз, а где "даны наборы "идентификатор и два соседних члена", соберите из них анальное кольцо и выведите противоположный элемент указанному" (я кстати сделал, но не уложился в тайминги по всем задачам, как нетрудно догадаться, если я литкодовское оббегание матриц змейкой по несколько вечеров делаю).
английский учи, хакер
>Странно
Потому что пидор ГОвнастый тебе лапшу на уши вешал, ибо в ДС-2:
"Go OR Golang": 450
"C# OR .NET": 588
package main
import (
crypto_rand "crypto/rand"
"encoding/binary"
math_rand "math/rand"
"fmt"
)
func init() {
//Randomizing seed from crypto/rand
var b [8]byte
_, err := crypto_rand.Read(b[:])
if err != nil {
panic("cannot seed math/rand package with cryptographically secure random number generator")
}
math_rand.Seed(int64(binary.LittleEndian.Uint64(b[:])))
}
func main() {
//making an array with random numbers
const ARRAY_W int = 10
const ARRAY_H int = 10
var myArray [ARRAY_W][ARRAY_H] int
for x := 0; x < ARRAY_W; x++ {
for y :=0; y < ARRAY_H; y++{
myArray[x][y] = math_rand.Intn(5)+1
}
}
//Printing array
for x := 0; x < ARRAY_W; x++ {
for y :=0; y < ARRAY_H; y++{
fmt.Printf("%v ",myArray[x][y])
}
fmt.Printf("\n")
}
}
package main
import (
crypto_rand "crypto/rand"
"encoding/binary"
math_rand "math/rand"
"fmt"
)
func init() {
//Randomizing seed from crypto/rand
var b [8]byte
_, err := crypto_rand.Read(b[:])
if err != nil {
panic("cannot seed math/rand package with cryptographically secure random number generator")
}
math_rand.Seed(int64(binary.LittleEndian.Uint64(b[:])))
}
func main() {
//making an array with random numbers
const ARRAY_W int = 10
const ARRAY_H int = 10
var myArray [ARRAY_W][ARRAY_H] int
for x := 0; x < ARRAY_W; x++ {
for y :=0; y < ARRAY_H; y++{
myArray[x][y] = math_rand.Intn(5)+1
}
}
//Printing array
for x := 0; x < ARRAY_W; x++ {
for y :=0; y < ARRAY_H; y++{
fmt.Printf("%v ",myArray[x][y])
}
fmt.Printf("\n")
}
}
*crypto/rand
>>460176
>>460175
>>460174
>>460173
Хорошие задачки, сразу будет видно людей, кто умеет программировать, ну или хотя бы потратил полгода-год на литкод, что уже говорит о мотивации человека.
Хорошо отсеит вкатунов, которые кое-как пролезли на галеру без литкода в эпоху ковида, научились писать примитивнейшие круды, а теперь возомнили себя разработчиками, лууул.
>>460490
Крудошлеп, ты? Как раз такие задачки проверяют навык умения кандидата рассуждать. И если нужно срочно запилить какую-нибудь фичу/пофиксить баг, то олимпиадник или задрот литкода с таким справится гораздо быстрее вчерашнего таксиста, которого по ошибке взяли в айти в 2021 году.
>>460490
>судя по тому сколько в яндексах платят (а это как раз места где ебут алгоритмами) - не нужно
Ну, мань, рынок после февраля все сужается и сужается, посмотрим как ты будешь новую работу искать без литкода.
>Крудошлеп, ты?
Может и я. Проблемы?
>Как раз такие задачки проверяют навык умения кандидата рассуждать.
Ошибочно. Они проверяют умение решать литкод на скорость. Именно на скорость. Я думаю мне не надо тебя убеждать в том, что любую из этих задач решит обезьяна, если дать ей пару дней, а не часов?
>И если нужно срочно запилить какую-нибудь фичу/пофиксить баг
Чёбля, баг пофиксит быстрее тот, кто работает с кодом, в котором баг появился, постоянно. Поэтому задачи на сопровождение уходят тем, кто знаком хорошо с кодобазой, а они уж перекидывают другим, если есть подозрение, что баг в другом месте. Ты вообще работаешь в айти? Какие-то странные вещи говоришь, как будто повторяешь чьи-то слова услышанные в интернете.
>Ну, мань, рынок после февраля все сужается и сужается, посмотрим как ты будешь новую работу искать без литкода.
Я не совсем понял в какой именно момент заслужил от тебя оскорбления, но если будет нужно, я и запуск ракет изучу, ты не переживай.
>Они проверяют умение решать литкод на скорость. Именно на скорость
Ну и? Нужно уметь решать алго задачи на скорость. Это стандарт в 21 веке блядь. Не суметь решить медиум с лита за 15 минут == быть опущем.
>Ну и?
Ну и к проду это не имеет отношения. Стандарт ли это или не стандарт на собеседованиях - вопрос отдельный, а вот это утверждение
>Как раз такие задачки проверяют навык умения кандидата рассуждать. И если нужно срочно запилить какую-нибудь фичу/пофиксить баг, то олимпиадник или задрот литкода с таким справится гораздо быстрее
является истиной где-то процентов на 10 (поскольку всё же есть определенная корреляция между литкодом и скиллами в работе, с чем я не согласен, так это с раздуванием её до 100%)
>> Ну и? Нужно уметь решать алго задачи на скорость. Это стандарт в 21 веке блядь. Не суметь решить медиум с лита за 15 минут == быть опущем.
Плюсану этого. Круды перекладывать можно и обезьяну научить, а литкод хотя бы показывает, что у человека какие-никакие навыки есть, помимо посещения курсов для вкатывальщиков.
Да и как правило такие люди без проблем могут и стандартную библиотеку продебажить, и протолкнуть фикс в опенсорс, и при необходимости решить проблемы с инфрой. В отличие от кодо-макак, которые маршалить json'ы научились, а думать - нет и любой крэш за пределами их уютного http handler'а надолго отправляет их к психотерапевту. Ох, помню, словил я как-то баг в одной либе, которая работала через cgo..
Кому нужно? Тебе? Иди решай.
Мне нужно, чтобы реверс прокси делало что-то типа
(http/https)://host:(80/443)/path/to/endpoint -> http://host:port(например 10002)/path/to/endpoint
в докере
Это вообще возможно сделать с traefik или я не так понял его функционал? Или если тут никто не шарит, куда обратиться за советом?
нитакусик в треде
Сервер - таск раннер напиши. Чтобы по http api можно было ставить задачи и потом проверять статус их выполнения. Опционально потом можешь сделать, чтобы можно было по вебсокетам получать апдейты по твоим задачам. Ну и там куча разных вариантов, как можно это внутри сделать, фичи можно подсматривать у celery, такая очередь задач на python, очень фичастая.
>Pgx
У него есть pool, в котором есть соединения к постгре, я сейчас через него делаю все запросы , аля pool.Query(ctx, "select gowno from zopa") , вопрос балансирует ли этот пул соединения? Есть ли у него какой то лоадбалансер или он просто делает запрос через первый коннекшн, пока запрос делается, образно оставшиеся 99 могут делать запросы, как первый освободится то он сделает другой запрос и так далее?
А нахуя тебе балансер в пуле, ты же всё равно одну бд указываешь и вся нагрузка на неё и ложится.
ну там есть параметр MinConn , MaxConn , задав их образно на 100 я могу иметь 100 конекшнов к базе, которые и выдерживает постгря, по дефолту вроде так
я просто из интереса, ведь много конекшнев которые делают запросы как-то там распределяя нагрузку , мб какой-то запрос долгий, то другой конекшн пойдет обрабатывать
>>466511
прикольно, значит освободившийся конекшн возвращается обратно в стек и если нагрузки не большие то часть конекшнов просто будет простаивать?
> прикольно, значит освободившийся конекшн возвращается обратно в стек и если нагрузки не большие то часть конекшнов просто будет простаивать?
Ну он их вроде закрывает потихоньку
> я просто из интереса, ведь много конекшнев которые делают запросы как-то там распределяя нагрузку , мб какой-то запрос долгий, то другой конекшн пойдет обрабатывать
Мне кажется, ты путаешь балансировку с чем-то ещё. Балансировка - это когда ты балансируешь запросы между несколькими исполнителями, загружая всех равномерно. Например, когда у тебя у одной базы есть много реплик на чтение и ты отправляешь запросы к ним ко всем, чтобы не задидосить одну случайную.
ок, тогда поясни за этот пул, если разбираешься
Есть смысл делать MinConn, MaxConn ?
я вообще провел такой эксперимент, вытянул из pg_stat_activity pid и еще некоторую инфу и заметил, что он реально делает указанное в MinConn число соединении, и, заблокировав поток select {} эти соединения висят в idle
Есть, как раз для скалирования числа коннектов, минимум - чтобы при скачке нагрузки оно скалировалось не с нуля, а максимум - ну там понятно, чтобы не превысить ограничения самой базы.
По-хорошему надо это дело выставлять, оглядывась на метрики, архитектуру и профиль нагрузки. На глазок я бы выставил что-нибудь вроде 10/50.
var b [8]byte
Ты никак не инициализируешь байт. Всегда нули будут В итоге ты инициализируешь сид одним и тем же байтом.
nginx? там это типа того будет:
location /path/to/endpoint {
proxy_pass http://host:10002/path/to/endpoint
}
С этим разобрались, окей, теперь вопрос возник другой
Когда стоит использовать Exec , а когда Query Row ?
Зачастую охота вернуть подтверждение из базы, вот мол, вставили в табличку, держи айди, по этому айди потом можешь чето еще делать, джоинить и тд. В Exec же мы просто выполняем операцию и все.
Да, у нас есть commandTag , но зачем это, если можно Query Row все делать ?
commandTag, err := conn.Exec("delete from widgets where id=$1", 42)
if err != nil {
return err
}
if commandTag.RowsAffected() != 1 {
return errors.New("No row found to delete")
}
Ты сам на всё ответил.
QueryRow операций, которые возвращают одну строку
Query для операций, которые возвращают много строк
Exec для операций, которые ничего не возвращают
Я Exec использую только для масс апдейта или удаления
У меня есть три таблички A, B, C. Когда я добавляю данные в таблицу A или B, у меня автоматом конкретно выбранные столбцы из этих таблиц попадают на новую строку в таблицу С
блятб в глаза долблюсь уже, промахнулся тредами, хотел к РБД боярам задать вопрос, а задал гошникам лол...
Только хотел спросить причем тут говна тред
Нет. Точно нет.
>>463806
Какая мотивация решать бесполезные задачи на литкоде в пол, просто тратя время, за которое еще и не платят чтобы потом выяснить, что эти задачи никакого отношения к работе не имеют? а? Какая должна быть мотивация?
У меня на 1 курсе были алгосы с подобными задачами, нарешался, теперь от них просто тошнит нахуй. Собеседуюсь на джуна , если не возьмут из -за алгоритмов, то отчасти буду рад, что не попал в такую компанию.
>>464347
прокинь в iptables или nginx
https://my.esecuredata.com/index.php?/knowledgebase/article/49/how-to-redirect-an-incoming-connection-to-a-different-ip-address-on-a-specific-port-using-iptables/
Да дохуя всего, зависит от твоего опыта
Начни с круда с использованием какой-нибудь постгри( в идеале найти какую-нибудь готовую базу на тысяч 40 записей, чтоб прочувствовать ошибку хуевого джойна), Не забудь ее поменять накатив хотя бы 5 миграции и собственно накатил/откатился, пока не почувствуешь уверенность или боль жопы(потому что эти все гуси и прочая шляпа работают плохо, выкидывая всякие ошибки по любому поводу, реализуй кэширование в какой-нибудь редис, как пример вышел новый сериал и юзеры запрашивают его, че, 100000 селектов ради того чтоб получить 1 и те же данные делать будем? Надо кэшировать , навали мониторинг, можешь поиграться с NoSQL в виде эластика или монги, если хочешь, далее задеплой это в докере
Как это сделаешь, время переходить к асинхронщине , выдумывай синтетические задачки(это самое сложное, поскольку то, что ты можешь выдумать ограничено твоими знаниями, то бишь в идеале найти кого-то кто будет это выдумывать, чтобы был рост, а не перебор своих же навыков)
Собственно, я сейчас тут.
Ну офк базовые навыки про операционные системы, шарить за модель ОСИ, понимать че вообще происходит когда в браузер вписываешь 2ch.hk/pr , хорошо если объяснение этого будет как минимум на 2-3 страницы а4 14 шрифта. Ну такое.
Далее можешь подаваться на джуна и готовить жопу под алгоритмические задачи, мне их решать противно, нет, я нормально отношусь к алгоритмам если они действительно нужны, как писал анон выше, когда стоит реальная задача вроде обхода дерева , и когда ты собсна реализуешь алгоритм под ее решение, а не синтетическое дерьмо из литкода
Хз. мб что-то забыл, но с большего так.
Почему сейчас обращают внимание на деплой в докер? Разве от этого надо писать какой-то особый код? Это же просто заливка программы на сервер. С этим любой эникейщик справится.
Дак реальные веб-приложения пишутся через net/http или всё же есть фреймворки, на которых это всё по-другому делается?
Учитывая, сколько раз ты перевыделаешь память под одну бедную, несчастную строку - 0.5 сотыг максимум.
Стринг билдер или буфер бы прикрутил туда, хотя бы.
Не говоря уже про то, что паттерн повторяется каждые 15 чиселок, поэтому теоретически ты можешь просто итерироваться по i +=15
Может как на стеке так и на куче
В основном всегда пытается выделить на стеке, если так нельзя, то выделяет на куче
Ну ты же не предлагаешь нам всерьез в голове это компилировать и запускать? Все посмотрели глазами и откомментировали, что заметили сходу
А какие работы существуют для гошников? Переписывают монолиты с джавы на микросервисы го?
Я чаще встречал что сразу копролиты пишут на говняке
если компилятор заметит обращение к указателю переменной то она будет в куче
Наоборот, в связи с санциями, обяжут нанимать программеров из рф только в качестве гошников. К концу года половина из них поедет кукухой, а половина самоубъется от жуткой депрессии.
Планирую запилить реал тайм ридер логов с докера и показом их на фронте, как идея? Тянет на intermediate?
Да мы заебали, научитесь читать треды, каждые 50 сообщений спрашиваете одно и то же
Любое веб апи норм, но будет лучше, если запилишь что-то с апи, бд, работой с очередями и разверткой через докер потому что это будет максимально приближено к типикал проектам на го
*вы заебали, оговорочка по фрейду, сам уже заебался отвечать на одно и то же
А какие тут фреймворки?
Скажите, насколько хорошо принимают перекатунов и насколько глубоко стоит знать го? Собесы жосткие на знание самого языка?
> Скажите, насколько хорошо принимают перекатунов
Нормально принимают, кейс переката из пыхи в го очень распространенный
> насколько глубоко стоит знать го?
Настолько хорошо, насколько можешь. Как минимум представлять себе, как работает рантайм и понимать идиоматику языка, благо её не очень много.
> Собесы жосткие на знание самого языка?
Сложнее, чем на PHP или JS, но проще, чем в Java. Готовься понимать, как работает сборка мусора и планировщик, а также знать, как под капотом работают базовые типы: мапы, слайсы, каналы, интерфейсы, строки.
Джавистов в го перекатывается меньше, чем пехапешников, но и такие есть.
>>480486
А в чём проблема взять любой пакет с таким типом, например https://github.com/shopspring/decimal ? Я его юзал, всё ок, драйвер бд поддерживает из коробки.
Ты с плюсов сюда пришел?)
3 года на вскоде, полёт нормальный. в голанде чето дохуя окошек кнопочек как вы этим пользуетесь ебать
>>482408
Выкладывайте код не картинкой, а в виде ссылки на https://go.dev/play/
>>481998
Запринти s сначала, возможно, что у тебя scanln как-то странно работает.
>>482408
Scanner это такой объект-буфер, куда ты засунул источник данных (os.Stdin) и теперь при работе с этим объектом он будет сам, по необходимости, читать данные из этого источника. Такой себе объект-хелпер и который избавляет тебя от необхоидимости работать с источником данных руками.
То есть, я говорю сканеру, что читать надо оттуда-то и потом, когда надо уже считать вызываю функцию Scan()? А до этого что в переменной находится?
>>482449
Тебе стоит понять концепцию "ленивых" вычислений.
В качестве очень грубого примера, ты воткнул лампу в удлиннитель, а удлиннитель в розетку. Ток не побежит по удлиннителю, пока ты не включишь саму лампу.
Так и в твоей ситуации. Ты подключил провод некому прибору, в данном случае буферу. И пока ты не вызовешь какие-нибудь методы от буфера, то есть не включишь сам прибор, он не начнет потреблять электричество.
А вообще посмотри код Scanner'а, он же тривиальный. И да, я не уверен, что он тебе сейчас вообще нужен.
Надо с клавиатуры считать строку с пробелами. Насколько я понял, сканы из fmt перестают считывать после пробела.
Ты просто не умеешь читать документацию и/или примеры.
fmt.Scanln ожидает от тебя, что ты заранее знаешь, сколько строк тебе передадут и поэтому сделаешь что-то вроде
var s1, s2, s3 string
if _, err := fmt.Scanln(&s1,&s2,&s3); err != nil {
panic(err)
}
println(s1,s2,s3)
ты бы понял это, если бы соизволил вот здесь >>481998
на третьей строке обработать ошибку от Scanln
Скорее всего, тебе нужен один из этих сниппетов: https://gosamples.dev/read-user-input/
}
Просто запихать в крон? Выглядит топорно и старо, может есть какие нибудь фреймворки, где в отдельной горутине можно запустить бесконечный цикл и как то делать это по другому?
Есть куча пакетов типа gocron, поищи по гитхабу, найдешь просто десятки.
Но они тебе на самом деле не нужны, ты можешь просто в коде сделать таймер примерно вот так, вообще без пакетов: https://goplay.tools/snippet/R3srpxc4Qxu
Для тривиальных случаев это нормально заработает, для сложных - тебе потребуются уже отдельные пакеты или всякие сторонние вещи вроде kubernetes cronjob.
Нет, щас тащемто через крон и сделано. Просто крон в отдельном контейнере крутится и мне казалось это хуевым решением
да вроде не на что пожаловаться. блейм в один клик, старые коммиты в пару кликов открываются, хоткеи поставил чтобы стейджить выделенные куски отдельно, черрипикнуть/заребейзиться на другой бранч в три клика
Нет, я ждун джава и поэтому буду составлять конкуренцию го ждунам, посему и спрашиваю
Да хули там в вашем кале разобраться то? У вас даже экспешенов нет, вместо него паник рофланэбало
Вот поэтому пишут всё на языке с эксепшенами и лишь маленькие кусочки реализуют на голанге
в центре тут гит граф https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph
а дефолтную вкладку гита я просто в secondary panel перенес, т.к. заебало переключатся между файлами и гитом.
ну и всякие gitlens, аддон для сташей который я раз в полгода использую чтобы посмотреть че за говно там скопилось и такое.
>И что это за стажировки в вайлдберисе и озоне, как там все проходит?
ну тут все просто. стажировка это не курсы. бэйзикалли ты устраиваешься жуном, только получаешь еще меньше и тебя еще легче выпизднуть. в начале тимлид/сеньор из твоей команды может какие-нибудь тестовые задачи дать типа накидай круд который ходит в этот сервис и забирает тупа никому не нужный жсон чисто чтобы ты с основами разобрался. а потом просто будешь обычные задачки брать и перейдеш на обычного джуна.
Ситуация: Приходит человек гетом, в ответ должен получить рандомное имя файла из S3.
Варианты:
1. На каждый запрос ходить в S3 получать список всех файлов, после чего отдавать рандомный из них.
+
up to date список файлов всегда
-
Медленно и не скалируется
2. Хранить все возможные ключи в монге
+
Быстренько получил рандомное имя сразу же из базы и отдал юзеру
-
Придётся контролировать чтобы в монге был up to date список файлов
3. Хранить всё это говно в редисе. Т.е. первый запрос будет ходить в S3 и пихать всё говно в редис. Как это дело обновлять без рестарта я не придумал.
Как белые люди решают такие проблемы? Я макака самоучка, мне ентерпрайзы с нормальной архитектурой даже не снятся.
чета я не понял почему у тебя решение с монгой и редисом разные, с точки зрения задачи они одно и то же.
если у тебя требований к задержке нет, то просто воркером получаеш весь список файлов и сохраняешб куда-нибудь, а сервисом из него отдаеш рандомный, проверяя что он действительно есть в с3. можешь это хоть с монгой/редисом/файликом на диске/в памяти делать в зависимости от конкретных нужд. потом можно допиливать вставку в кеш при вставке в хранилище и удоление несуществующих при неудачных выборках
В озон тяжко попасть, там попускают по алгоритмам жестко. В вайлдбериз вроде попроще, один знакомый с интеллектом ниже плинтуса туда как-то попал, правда его в штат после стажи не взяли. Сейчас он на фронте кстати, мобилизовали, не успел после окончания вышки найти быстро работу в аккредитованной конторе, а у него военная кафедра была в унике, в магистратуру не пошел.
Сейчас в РФ в принципе работы для жунов не осталось. На джаве тоже. Но за рубежом (говорим про ЕС, США, Канаду, Австралию) джавы на порядок больше.
В сбер-что-то предлагают пойти, но у них там livecoding. Что за задания в общем? Типа помержить два списка или fan-in/fan-out написать? Или что там вообще?
ну так че там было
Звучит как какие-нибудь триггеры, не совсем понятно, что за таблица С, приведи конкретный пример.
Сап! Помогите новичку. Пытаюсь запустить helloworld на goclipse - вылезает ошибка пикрил. Подозреваю, что проблема в GOPATH. В инструкции по установке goclipse сказано, что GOPATH должна вести в папку workspace. А после установки Go путь вёл в несуществующую папку C:\users\username\go и ошибка была, что надо дописывать @lastinstall, если Go установлен не на диске С.
1. твоя проблема в том, что ты взял какое-то древнее говно. давно уже модули все юзают, а не GOPATH.
2. нихуя не понятно в какой папке у тебя проект, а где GOPATH. в тайтлбаре нарисовано MyFirstGo\workspace, а в окне EclipseGO\workspace. тебе пакет нужно создавать там, куда ты GOPATH направил. лучше бы дефолтное ~/go/src оставил и там создавал, т.к. нахуя тебе под конкретную IDE это подстраивать.
у тебя есть три варика:
1. тупа делаеш go mod init myproject из папки с твоим проектом.
2. как белый человек делаеш go mod init github.com/anon/myproject
3. как 300 IQ правильно настраиваешь свой GOPATH, создаешь внутри него проект и тупо делаеш go mod init, а название из папочек подтянется само.
Как дойти хотя бы до собеседования? я уже не говорю про получить оффер, хотя бы просто дойти до собеседования. Другой стек пока не рассматриваю, да и особо нечего, я много времени и ресурсов вложил в изучение этого языка и ну типа жалко.
а да, свитчнулся с питухона, имею универский бекграунд по информатике, умею в докер, кафку, релационные субд и немного в нерелационные, ну и всякая прочая экосистема, разве что в кубер не умею, не было задач где он был бы мне нужен, но бля, разве этого мало? Хочу хотя бы 1к долларов на старте, пиздец. Каким надо быть гением мысли чтобы писать на Go за деньги? Не за деньги так пожалуйста, пиши хоть сутками, а как за деньги, так подавай сениора с 100 годами опыта
линкедин есть?
где ишешь на каких сайтах?
пробовал на почту херкам сразу кидать резуме?
скинь гит, оценим подскажем
в го не любят джунов, минимум мидол, и желательно перекатун с другого языка.
го это оптимизации микросервисноый архитектуры, мы нужны в основном крупным компаниям, реже галерам. а крупные компании это деньги, так что не надо жатся как на вакансию пыхера и просить сотку.
у херок обычно есть бюджет, редко это меньше 3к, они смотрят по зп желаемой кто ты. вот наймут тебя на 1к, через 2 месяца ты съебешь от них на 3к, они это понимют прекрасно.
проси 3к+ скажи работал в стартапе неоф. и писал тесты на гохе(оч важно кстати тесты уметь писать для разраба). теперь поднатянулся и решил больше в код.
алсо чем меньше зп просишь тем больше ебут на собесе, 200круб или 3к это уровень мидла начальный примерно
первый месяц ты будешь только получать доступы и делать песочные задачи, с 2 месяца только начнут смотреть как ты работаешь реально, так что к этому времени упеешь разобратся
Добавил @latest. Теперь goclipse хочет, чтобы я поставил точку в элементе первого пути. Объясните, пожалуйста, где этот элемент.
>а у него военная кафедра была в унике
хм, а убеждали, что не будут с кафедрой призывать.
Лучшая реклама для того, чтобы учить алгоритмы
Попросят код пруфануть, что тогда? Ссылаться на НДА?
>>503900
Да, завел недавно, я как-то не сижу в соц сетях, хотя общения и друзей/знакомых достаточно, общаемся по тг
justjoin it
ну и местные доски по стране
Не пробовал, только откликался на вакансии. У них же там как минимум 1 хрюша сидит для этого, им приходят пуши во все места, насколько я знаю, и собственно, задача хрюши на это реагировать, так что думаю посмотреть посмотрели. написав им на почту ничего бы не поменялось
Касаемо гита, там 1 микросервис для JWT(можно пихнуть как мидлварю в любое место и если юзер это юзер, то будет отдавать к примеру его айдишник и пермишены, офк , тесты, докер хуекер и так далее согласно модным архитектурам, сервисы, репозитории и тд и тп. Надо бы еще метрики подкрутить и разобраться с сваггер документации, с 1 раза не завелось что-то. универские проекты и все остальное в приватных репо
В каком ide лучше начать изучать GO?
Goland/VSCode
go install ./cmd/helloworld для установки локального покета. ожидается что у тебя в ./cmd/helloworld есть main.go
если у тебя есть main.go в текущей папке то тупа можно go install
go install github.com/hui/pizda@latest для установки пакета из интернета
Numeric constants represent exact values of arbitrary precision and do not overflow.
точно, спасибо.
это для любителей копипастить хешы или сидеть тыкать TAB TAB TAB TAB TAB TAB до нужного коммита
Макака табает, премия капает
Это копия, сохраненная 8 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.