Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 1006 80 270
Go тред №24 go /go/ Аноним 21/06/23 Срд 19:07:09 2740805 1
golang.png 48Кб, 390x410
390x410
st,small,507x50[...].jpg 76Кб, 413x410
413x410
memehu32ae5b6d8[...].jpg 37Кб, 660x410
660x410
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, имеет богатую и универсальную стандартную библиотеку и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де-факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.

С чего начать:
- В обязательном порядке проходим Go Tour: https://go.dev/tour/welcome/1
- Читаем документацию (рекомендуется начать со спеки и Effective Go): https://go.dev/doc/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)

Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/ и https://www.practical-go-lessons.com/ (веб-версия - бесплатная и хорошо подходит для новичков в программировании)
- Книги из списка https://github.com/dariubs/GoBooks

Полезные ресурсы:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/
- Смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
- Обновляемый список с пакетами: https://github.com/avelino/awesome-go

Небольшая конфа треда: https://t.me/golang2ch более чем живая!

Предыдущий тред тонет здесь: >>2665435 (OP) (OP)
Аноним 21/06/23 Срд 19:49:41 2740844 2
Все-ли подготовились к тому, что очень скоро придётся уметь писать на Go v.1 и Go v.2? В ожидании переходного периода...
Аноним 21/06/23 Срд 20:00:46 2740857 3
Аноним 21/06/23 Срд 20:05:18 2740864 4
Аноним 21/06/23 Срд 23:59:45 2741027 5
> // Make sure that Foo implements Bar
> var _ Bar = &Foo{...}
Как перестать орать с этого Unterprogrammiersprache?
Аноним 22/06/23 Чтв 11:01:11 2741244 6
>>2740844
Очень скоро(2 с половиной человека обсуждали в 2018 году). На самом деле в го все хорошо сейчас, и надо просто поправить несколько багов языка и все
Аноним 22/06/23 Чтв 20:25:16 2741882 7
>>2740844
А зачем ему вторая глобальная версия? Язык уже хорош. Проблемы есть, они решаются. Дженерики завезли, хоть они и не были обязательными. Главное, чтоб всё говно подряд в него не пихали и язык не потонул
Аноним 22/06/23 Чтв 20:35:42 2741897 8
>>2740844
Уже миллион раз обсуждали, что его делать не будут, шиз
Аноним 22/06/23 Чтв 22:52:39 2742026 9
>>2741244
>>2741882
>>2741897
Ага, не будет. Поэтому вторую версию активно пилят на гитхабе. Алсо, у тебя специфический архитектурный паттерн постов без точек в конце, так что не притворяйся глыбой общественного мнения.
Аноним 22/06/23 Чтв 22:57:28 2742035 10
>>2742026
Очередной шиз не в силах отличить разных анонов.
Алсо, укажи этот активный пилящийся на гитхабе проект)))
А ты по ссылке выше всего пару ишуев за весь 2023 год
Аноним 22/06/23 Чтв 23:01:16 2742037 11
Аноним 22/06/23 Чтв 23:02:07 2742039 12
>>2742035
Ты в закрытые глянь, специалистъ.
Аноним 22/06/23 Чтв 23:02:43 2742041 13
>>2742039
Извини, верю больше словам разработчика гошки
Аноним 22/06/23 Чтв 23:04:55 2742043 14
>>2742041
>пук
Один из пиздеть не будет. Они там про обратную совместимость почти 2 года срались друг с другом.
Аноним 22/06/23 Чтв 23:06:22 2742045 15
>>2742043
Это не один из, а буквально человек, который внес основной вклад в язык.
Ишуи на твоем гитхабе не более чем рандомный высер других рандомных людей, их создавать если что каждый может, не нужно быть контрибутором
Аноним 22/06/23 Чтв 23:12:38 2742048 16
>>2742045
А остальные четверо основателей там кофе твоему Коксу таскали? С момента публикации кода не кислое сообщество появилось. Ты можешь дрочить на своего лектора сколько угодно, но гошка уже далеко не внутренний проект гуголя.
Аноним 22/06/23 Чтв 23:30:32 2742057 17
Аноним 22/06/23 Чтв 23:48:04 2742077 18
Какая примерно разница в затратах на сервера node.js VS go?
Понятно, что нода жрет куда больше, но вот если, условно говоря, на ноде нужен один сервер с четырьмя ядрами и 8гб оперативы, то во сколько раз меньше ресурсов нужно будет go? При допущении что функционал и нагрузка +/- одинаковые.
Аноним 22/06/23 Чтв 23:52:43 2742080 19
>>2742077
В JS треде выкладывали сравнение. При самых синтетических условиях Go не более +10% выдаёт. Гигантам такое интересно, а остальные прост повторяют за ними.
Аноним 23/06/23 Птн 01:21:19 2742149 20
>>2740844
ну максимум нужно будет просто перейти на v2 либы стандартной библиотеки вроде math/v2, которую обсуждают.

остальную хуйню завезут специальными флагами и автоматическим переформатированием.
Аноним 23/06/23 Птн 11:49:38 2742474 21
>>2742080
Только есть одно но, гошка умеет в мультитред, потому то нода на беке никому и в хуй не уперлась кроме всякой школоты
Аноним 23/06/23 Птн 12:30:15 2742501 22
>>2742474
Ржавый тоже умеет, вот только на нём до сих пор пишут лгбт маргиналы. Голанг хорош для микросервисов и жонглирования ими, но рыночек решает в пользу ноды. Отсюда вытекает запихивание её в те направления, где жопоскрип ранее не использовали.
Аноним 23/06/23 Птн 16:53:05 2742815 23
>>2742474
На самом деле нода быстрее для прототипирования и MVP, если это не хайлоад, то и на первых этапах жизни стартапа нода лучше т.к. на ней дешевле и быстрее разрабатывать из-за большого количества специалистов. Самое хреновое это взять, например, rust и тогда стартап загнется с вероятностью 90%
Аноним 23/06/23 Птн 23:55:56 2743169 24
slow.Value - это аналог atomic.Value, с двумя ограничениями:

Вызов Load() всегда занимает не меньше 1ms
Нельзя делать больше одного вызова Load() в один момент времени.
Реализуйте
Batcher, который оборачивает slow.Value и ускоряет чтения за счёт батчинга.

Например, если 1000 горутин одновременно сделают вызов (
Batcher).Load(), то можно прочитать значение один раз и раздать всем ожидающим горутинам. Это будет в 1000 раз быстрее, чем вызвать (*slow.Value).Load() напрямую в каждой горутине.

Ваша реализация не должна создавать stale read. То есть, Load() всегда должен возвращать значение не старее последнего Store() на момент начала вызова Load().

Как такое решать на го?
Аноним 23/06/23 Птн 23:59:45 2743174 25
Аноним 24/06/23 Суб 02:00:57 2743224 26
>>2743169
>Ваша реализация не должна создавать stale read. То есть, Load() всегда должен возвращать значение не старее последнего Store() на момент начала вызова Load().
ну тут очевидно что снаружи это можно обернуть в rwmutex. требования к тому, сколько может ждать Store не описаны.
внутри мютекса просто https://pkg.go.dev/golang.org/x/sync/singleflight или самописная альтернатива.
Аноним 24/06/23 Суб 02:08:34 2743225 27
>>2743224
ну или там внутри обернуть чисто чтение/запись один хуй))
Аноним 24/06/23 Суб 02:10:29 2743226 28
Аноним 24/06/23 Суб 16:49:24 2743517 29
>>2743169
>Ваша реализация не должна создавать stale read. То есть, Load() всегда должен возвращать значение не старее последнего Store() на момент начала вызова Load().
ну вот такое тесты проходит например https://go.dev/play/p/idgiLgEFM7d
>не старее последнего Store()
вызова или выхода?
Аноним 24/06/23 Суб 23:07:05 2743739 30
Расскажи про свои проекты, анон. Какой стек, типовые или интересные задачи. Читаю требования к гошникам, поголовно нужен redis, kafka, rabbitMQ? Насколько глубоко нужно разбираться во всем этом?
Аноним 24/06/23 Суб 23:22:21 2743745 31
>>2743169
Через канал нельзя решить? Каждая горутина передает канал на запись в в канал батчера, тот один раз читает и пишет в канал каждой горутине?
Аноним 25/06/23 Вск 04:58:05 2743787 32
>>2743739
ну это от компании зависит. у нас например отдельная команда занимается инфрой, а команды которые пилят фичи для юзеров тупо используют обёртки от инфры - в идеале у нас тупо обертки, которые предоставляют "кеш" и "очередь". подключать/менеджить/пилить фичи для их не приходится, но на нас задача их правильно архитектурно заюзать, чтобы было масштабируемо, и тут детали (например нагрузка/макс размер сообщения/доступность) тоже учитывать приходится.
>rabbitMQ
это по-моему какая-то устаревшая дохлая никому не нужная залупа, хотя и у всех на слуху. если она в вакухе, то 100% тебе нужно будет поддерживать легаси
>redis
ну тут реально учить нехуй, просто открываешь доку с командами и ебашишь. разворачиваешь в докере и через терминал можешь все команды сам отдебажить. ну разве что если приходится делать не тупа кеш и ты луа не знаешь, то надо луа выучить. учитывая что для редиса тебе максимум литералли базовый синтаксис пригодится с несколькими функциями стдлибы, то это даже легче гошки.
>kafka
ну типа паблишим читаем, хз. у нас вся работа завернута в свою обёртку. буквально сделать queue.New() и зарегать хендлеры вроде queue.HandleZalupa(zalupaHandler). ну например надо понимать что накать, а что откладывать. и что можно класть в сообщение, а что не стоит (а тут уже надо понимать отличие кафки от натса или другой хуйни).
Аноним 25/06/23 Вск 11:51:45 2743916 33
>>2743787
>это по-моему какая-то устаревшая дохлая никому не нужная залупа, хотя и у всех на слуху. если она в вакухе, то 100% тебе нужно будет поддерживать легаси
Лол, эксперт в треде.
Кролик по сути та же самая хуйня что и кафка с некоторыми отличиями. Та же очередь, точно также используется в продакшене для микросервисов и новые версии регулярно выходят, как раз недавно вышла новая версия erlang и кролик обновили под него, хз откуда ты про легаси взял. Может у вас в конторе раньше был, но по каким-то причинам например слишком много данных весело в очереди и много писалось на диск перешли на кафку, а старое осталось на кролике.
Аноним 25/06/23 Вск 16:48:03 2744179 34
Как бы вы реализовали потокобезопасный счетчик не используя пакет sync?
Аноним 25/06/23 Вск 17:31:11 2744212 35
>>2744179
Через каналы наверно, есть горутина, которая слушает и увеличивает его, и есть которые паблишат в канал
мимо нюфаня
Аноним 25/06/23 Вск 17:38:37 2744215 36
>>2744212
Через каналы, но каким именно образом?
Паблишат, что именно?
Аноним 25/06/23 Вск 17:44:41 2744217 37
>>2744215
Паблишат единичку/нужное число в канал горутины, которая производит увеличение счетчика.
Аноним 25/06/23 Вск 19:14:03 2744255 38
Аноним 25/06/23 Вск 22:56:41 2744385 39
В ахуе с этого чела, чел на удаленке делает лям или чуть больше в месяц!
Купил Порш и Рендж ровер.

https://www.youtube.com/watch?v=1lYPRLkqVS8
Аноним 25/06/23 Вск 23:53:20 2744401 40
>>2744385
Красавчик, смотрел его видосы. Пригласите его в тред.
Аноним 25/06/23 Вск 23:55:05 2744402 41
>>2744385
>Предварительная стоимость курса "Порше за полгода" - 100 000 рублей.
Как раз кредит отобьет, лол
Аноним 26/06/23 Пнд 02:00:06 2744430 42
>>2743916
да я хз я с ним не работал, но отец знакомого один раз пришел с работы и сказал что нужно переходить на другую очередь, ничего не объяснил, было какое-то совещание.
энивей на собесе не должны развернуть, если знаеш как хотя бы какой-то очередью пользоваться
Аноним 27/06/23 Втр 20:38:48 2746540 43
Начал пробовать. Подскажите, плз. Есть ли у меня возможность слать сообщения разных типов в канал. Может можно объеденить их как-то? Дженерики нам в этом не помогут? Допустим клиент мне шлёт разные сообщения по tcp, я их обрабатываю и хочу полылать в канал, который читается корутиной, которая уже реализует логику их обработки. Эти сообщения содержат разные данные и, соответственно, представлены разными структурами. Без алгебраических типов данных я иду нахуй с такими идеями?
Аноним 27/06/23 Втр 23:10:55 2746665 44
>>2746540
Дженерики больше про устранение бойлерплейта.
Я бы объявил интерфейс I с методом обработчиком, реализовал бы его для каждой структуры и канал объявил с типом элементов I. Ну это если логика для обработки сообщений разная.
Правда придется перед тем как положить в канал определиться в какую структуру писать байтики или что у тебя там передается по tcp. Если не прав, то обоссыте.
мимо-нюфаня
Аноним 27/06/23 Втр 23:18:59 2746671 45
>>2744179
>не используя пакет sync?
Разумеется используя пакет atomic!

В целом задача хреново сформулирована. Например для реализации многопоточных счетчиков часто применяют шаблон, когда у каждого потока свой счетчик, а когда нужно узнать общую сумму их тупо суммируют. есть проблема, что часть данных не актуальная на момент подсчета Можно данные в канал слать, как уже подсказали. Можно свой мьютекс на базе атомарного чтения делать но это опять же sync.

В целом за использование чего-то кроме XADD в прод коде, надо пиздить.
Аноним 28/06/23 Срд 00:00:34 2746688 46
>>2746671
Подразумевается использовать каналы и горутины, atomic тоже нельзя
>XADD
это как?
Аноним 28/06/23 Срд 00:43:27 2746701 47
niceaccount5-16[...].mp4 519Кб, 726x720, 00:00:20
726x720
>>2746688
>использовать горутины нельзя
ну тогда любой инт потокобезопасный
Аноним 28/06/23 Срд 03:19:44 2746728 48
>>2746701
Покормлю.
Можно горутины и каналы.
Нельзя sync и sync/atomic.
Анон выше дал правильный ответ.
Встречал реализацию, когда присылают не число, а функцию (команду) инкремента.
Аноним 29/06/23 Чтв 21:42:42 2748548 49
>>2740805 (OP)
Go настолько же оптимизирован, как C, или он ближе к питону и C#?
Аноним 29/06/23 Чтв 23:00:47 2748621 50
image.png 183Кб, 1672x790
1672x790
Привет. После долгого программирования на Питоне вернулся к Го. Когда открыл папку с гошными проектами сразу появились такие ошибки. При этом сами файлы запускаются отлично (без ошибок). Что это, и как это фиксить?
Аноним 30/06/23 Птн 10:06:31 2748774 51
>>2748621
У тебя в одном пакете несколько функций main.
Либо растащи их по разным пакетам, либо удали лишние
Аноним 30/06/23 Птн 18:31:16 2749413 52
>>2748548
ну это охуенно зависит от задачи. сишку не обыграть, компайлер тут довольно тупой, чтобы скорость конпеляции была быстрой. плюс ГЦ. но зависит конечно же от программы. если ты конкретную асинхронную программу напишешь тупа на тредах, если в сишке ты не ебёшь как делать грин треды и оптимизировать под асинхронность, то сишка соснёт под нагрузкой по сравнению с гошкой.
усреднённо получше шарпа и тем более петона, за исключением корнер кейсов.
Аноним 30/06/23 Птн 20:35:36 2749616 53
>>2749413
>усреднённо получше шарпа и тем более петона, за исключением корнер кейсов.
А еще за исключением более-менее сложной бизнес-логики. Джсоны перекладывать конечно удобно, но строить модели данных с логикой их взаимодействия с только с помощью примитывных структур это величайшая ебля которую можно придумать.
Аноним 30/06/23 Птн 23:29:35 2749880 54
>>2749413
>если в сишке ты не ебёшь как делать грин треды
В Си грин треды только долбоебы делают. На сях запускают N нативных тредов и шарят работу между ними. Почитай про тот же Nginx работает с потоками https://habr.com/ru/articles/260065/

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


>>2749616
>но строить модели данных с логикой их взаимодействия с только с помощью примитывных структур это величайшая ебля которую можно придумать.
И к сожалению гугл это делает.
Аноним 01/07/23 Суб 02:00:23 2749957 55
>>2749616
Структуры с методами не покрывают потребность?
Что есть в других языках для построения сложных моделей ?
Аноним 01/07/23 Суб 04:07:21 2749986 56
>>2749880
>Почитай про тот же Nginx работает с потоками
ну он заточен бейзикалли под одну задачу, это не новые продуктовые фичи в каждом спринте допиливать. в зделол-годами оптимизируеш-годами пользуешься конечно сишка выиграет.
>запускают N нативных тредов и шарят работу между ними
в такой формулировке звучит так же, как гошка.
если опустить блевотные шахматные альтернативы, то статья тупа про тот же нетполлер в го, только там это главная фича.
Аноним 01/07/23 Суб 09:47:26 2750043 57
А что с работой на этой вашей гошечке в европках?
Аноним 02/07/23 Вск 03:51:47 2750776 58
Аноним 02/07/23 Вск 03:57:47 2750777 59
В Го не бьют по рукам, если не писать геттеры для полей структур в случаях, когда они просто возвращают поле?
Аноним 02/07/23 Вск 06:50:18 2750786 60
>>2750777
в го бьют по рукам, если писать геттеры, которые возвращают тупо поле.
Аноним 02/07/23 Вск 06:50:46 2750787 61
>>2750786
за исключением случая, когда это нужно для реализации интерфейса
Аноним 02/07/23 Вск 11:53:18 2750900 62
>>2749957
>Структуры с методами не покрывают потребность?
Покрывает, но кода дохера получается, повторное использование кода низкое, а дублирования много. Может конечно это у нашего проекта такие проблемы.
Аноним 03/07/23 Пнд 08:56:26 2751800 63
>>2749616
Структур и функций достаточно чтобы строить сколько угодно сложную хуйню. Функциональный язык, например OCaml, не даст спиздеть. Просто помимо этого язык имеет вменяемую систему типов, нормальный полиморфизм, а не то говно позорное, что завезли в го, алгебраические типы и умный компилятор, созданый учёными.
Аноним 03/07/23 Пнд 21:28:13 2752588 64
>>2751800
Просто интересно, откуда у залетных в тред такие познания в других языках и при этом опыт применения Го? Ты на OCalm пишешь продакшен код? Или тут 95% студентота, которая приходит с языком на котором лабу1 написала
Аноним 04/07/23 Втр 22:45:27 2754108 65
Анон, посоветуй, как го-вейно обыграть следующую архитектуру:
приложение периодически шлет GET запросы к одному хосту по нескольким урлам, запросами получаются данные и дальше они передаются обработчику, который парсит данные и должен инициировать POST запрос к тому же хосту.
Хочу сделать асинхронное получение и отправку, т.е. развязать операции с GET и POST.
При этом у серверного хоста есть рейтлимит, который известен клиенту.
Думал сделать простую очередь на одном канале, куда worker-ы для каждого урла будут кидать запросы, а обработчик очереди (канала) будет отсылать их серверу и при этом контролировать, что рейт лимит не превышен. Если превышен, то временно приостановать обработку очереди.
Самое простое решение это отдать канал очереди воркерам, которые инициируют GET и POST звапросы, но кажется это не лучшее решение, т.к. каналом владеет одна горутина, а пишут в нее другие. Но в целом закрывать этот канал необходимости нет. Норм подход? Какой вариант еще может быть? FanIn, FanOut в чистом виде не придумал как сюда прикрутить.
Аноним 04/07/23 Втр 23:07:57 2754125 66
>>2754108
>Хочу сделать асинхронное получение и отправку, т.е. развязать операции с GET и POST.
зачем и нахуя? звучит как переусложнение на ровном месте.
плюс твоя очередь на канале проебется при любом рестарте
Аноним 04/07/23 Втр 23:18:44 2754138 67
>>2754125
>зачем и нахуя? звучит как переусложнение на ровном месте.
Для pet проджекта, хотелось бы реализовать очередь на каналах, чтобы все асинхронно работало. Представим, что сервер готов держать 1000 запросов в минуту от одного клиента, а обработка полученных данных на стороне клиента условно может занимать 5 сек. За это время можно отправить еще несколько GET -запросов + какие-то обрбаотчики могут завершить выполнения и быть готовыми отправить POST. Они могли бы и сами это делать, но нужно тогда как-то шарить значение рейт лимита между воркерами.
>плюс твоя очередь на канале проебется при любом рестарте
это не критично совсем
Аноним 05/07/23 Срд 00:41:14 2754190 68
>>2754138
>но нужно тогда как-то шарить значение рейт лимита между воркерами
ну можно https://pkg.go.dev/golang.org/x/time/rate заюзать.
ну т.е. с 5 секундами на ответ, тебе в любом случае придется дохуя горутин делать, чтобы все 1000 rps заюзать. ну ты там упорешься и будет один/N воркеров который делает геты, один/N воркеров для постов и дохуя горутин с вычислениями. и ты можешь еще разные N каждых воркеров поставить, бенчить это, и всё это будет обмазано каналами/вейтгруппами.
или можно сделать так https://go.dev/play/p/O-7MgQV6Iqy и у тебя логика будет тупой и последовательной, с тем же самым количеством горутин
Аноним 05/07/23 Срд 21:45:46 2755371 69
>>2752588
>Просто интересно, откуда у залетных в тред такие познания в других языках и при этом опыт применения Го? Ты на OCalm пишешь продакшен код? Или тут 95% студентота, которая приходит с языком на котором лабу1 написала
Писал на нем диплом, реализовывал компилятор функционального языка с системой типов Хиндли - Милнера. А потом свернул не туда. Есть коллега которого из Гугла переманили HFT кодить на OCalm.

Мимо другой анон.
Аноним 05/07/23 Срд 22:16:31 2755435 70
slice := []int{999}
fmt.Printf("%p\n", &slice)
func_slice := func(x []int) { fmt.Printf("%p\n", &x); x[0] += 1; return }
func_slice(slice)
fmt.Println(slice)

В пространстве функции main() находится slice с определённой ссылкой на область памяти. При использовании slice в func_slice создаётся копия x с другим адресом в раме. Какого хуя при внесении изменений в копию x, изменяется ещё и slice, который находится в другом пространстве и с другой ссылкой на область памяти?
Аноним 05/07/23 Срд 23:15:55 2755515 71
>>2755435
ну смотри например https://go.dev/play/p/eVU3UsPdcSZ

ты сам слайс и не менял, ты менял значения во массиве, на который слайс ссылается
Аноним 05/07/23 Срд 23:40:53 2755557 72
Господа, программачеры, нужна ваша помощь.

Есть одна задача, суть такова:

Есть несколько слова с четным количеством символов и нечетным.

Если количество символов четное, то вывести два средних символа, если нечетное- два символа

С четными символами все просто, - работает. А вот нечетными символами, никак не получается вывести два символа.

https://go.dev/play/p/5lnQdUOVojh

Как я понимаю, что нужно добавить какой-нибудль шаг +1. Но как это сделать хз.

Пробовал еще сделать что-то -типа (s[2-1:len(s)/2+1]) но это плохое решение, что как работает с ограниченным количеством символов, если например будет нечетное слово не из 5-ти, а из 7 символов, то выведет три символа, а не два
Аноним 06/07/23 Чтв 00:12:46 2755607 73
>>2755557
>если нечетное- два символа
два символа откуда? если примерно посередине, то смотри.
для четного берешь индкесы [l/2-1] и [l/2]
для нечетного - [l/2] и [l/2+1] например (или вообще то же самое, что для четных). остальное это научиться в синтаксис сабслайсинга.

да мне что-то кажется, что задача была не с подъебом про нечётное количество символов, а условие что нужно вывести два как раз к тому, чтобы у чётных/нечётных было одно решение.

https://go.dev/play/p/KM848nzqm23
Аноним 06/07/23 Чтв 00:23:36 2755614 74
>>2755435
>создаётся копия
Схуяли? Не создается, иди читай гайды го для долбаебов, что такое слайсы
Аноним 06/07/23 Чтв 09:43:13 2755808 75
>>2755515
Почему ссылки отличаются (0xc0000ac018, 0xc0000ac028), несмотря на обращение через поинтер?
Аноним 06/07/23 Чтв 10:43:34 2755849 76
>>2755515
>>2755614
Разобрался. При передаче в функцию создаётся копия слайса, но внутренняя ссылка на массив остаётся прежней. Можно узнать через принтование адреса первого элемента.
Аноним 06/07/23 Чтв 11:08:17 2755873 77
>>2740805 (OP)
Взялся короче написать что-нибудь для практики и портфолио.
У меня давно витала идея приложухи для небольшого бизнеса, где я когда-то работал.
Ментор посоветовал насчёт проектов
>Можно написать сервис, с crud ручками и БД, редисом и кафкой, чтобы потрогать библиотеки и т.д.
Ну я и начал, там буквально десяток табличек: клиенты, заказы, мастера, услуги, номенклатура ремонтируемых агрегатов, самая такая база. И это чисто апи с ручками, т.е. чтобы это реально работало (а я хочу, чтобы это реально работало), ещё не хватает фронта
А я сам 1сник, сижу тужусь и понимаю, что подобную хуиту в 1с накидать работы на 4 часа максимум и там ещё будет из коробки фронт к этому всему.
Сука руки опускаются и как обычно мысли уровня "а тем ли я занимаюсь блядь?". Скажите, мне просто нужно взять себя в руки или я реально делаю что-то не так и можно лучше (в плане взять проект в котором го реально будет блистать)?
Это не троллинг если чё
Аноним 06/07/23 Чтв 11:15:34 2755878 78
>>2755873
> А я сам 1сник, сижу тужусь и понимаю, что подобную хуиту в 1с накидать работы на 4 часа максимум и там ещё будет из коробки фронт к этому всему.
Если нужно очень быстро - попробуй https://gobuffalo.io/
Аноним 06/07/23 Чтв 11:23:48 2755882 79
>>2755873
Найди то, что нельзя реализовать в 1С, и попробуй сделать в твоем приложении
Аноним 06/07/23 Чтв 11:32:52 2755887 80
>>2755882
>то, что нельзя реализовать в 1С
Способность справляться с большими нагрузками в основном.
Ну и возможность создавать свои индексы в бд в 1с очень порезана, она есть, но через жопу, особенно когда ты хочешь кластерный сделать такой как тебе надо. Это опять же в копилку производительности всей системы в целом.
И возможность без кучи бойлерплейта делать нормальную интеграцию с другими приложениями. В 1с из-за динамической типизации нужно городить кучу верификаторов, конструкторов и прочего безобразия.
А числодробилок в этом конкретном проекте нет.
>>2755878
Хм, интересно, погляжу на досуге. спасибо
Аноним 06/07/23 Чтв 22:10:46 2756790 81
>>2754190
Спасибо, но в твоем примере сама очередь конечна.
В общем сложная тема, согласен, думаю сделаю проще - запущу несколько горутин, которые делают периодические запросы каждый по своему урлу, воркер с обработкой ответа в этой же функции будет. Рейт лимит может быть заюзаю тот, что ты кинул, либо сделаю простой на RW мютексе, либо в первой итерации проекта вообще откажусь от рейтлимита.
Аноним 06/07/23 Чтв 22:13:24 2756794 82
>>2755849
Еще момент учитывай, что если внутри func_slice использовать append, то массив может быть создан новый и добавляемые элементы не будут добавлены в массив оригинального слайса.
Аноним 07/07/23 Птн 11:37:24 2757184 83
Анон, вынес конфиг своей приложеньки в yaml, создал отдельный пакет, инициализацию сделал через once. Но возник вопрос с инкапсуляцией полей структуры конфига, т.к. поля должны быть видимы вне пакета, иначе оно не анмаршалится. Т.е. в других пакетах можно просто взять конфиг и напрямую поменять поле. Понятно, что никто в трезвом уме делать так не будет, но формально это все же нарушение инкапсуляции и иммутабельности. Можно конечно сделать структуру-враппер, которая ембеддит оригинальную и навесить на нее геттеры, которые возвращают значения полей исходной структуры. В общем как в го реализуется внешнее конфигурирование?
Аноним 07/07/23 Птн 12:19:12 2757233 84
>>2757184
>Понятно, что никто в трезвом уме делать так не будет, но формально это все же нарушение инкапсуляции и иммутабельности
это го, привыкай. тут можно io.EOF = nil сделать.
Аноним 07/07/23 Птн 19:52:29 2757872 85
>>2757233
Можно и в джаве такое сделать, только там нет не помню необходимости поля класса наружу выставлять
Посоветуйте го-либу для парсинга ямла, где нет такой беды
Аноним 07/07/23 Птн 22:49:00 2758140 86
Такой вопрос: как часто вы используете context.Context? Я не про просто пробрасывание ниже по цепочке вызовов, а создать новый с таймаутом, запустить что-то в бекграунде и т.п.? Какие есть бест практисиси?
Аноним 07/07/23 Птн 22:51:52 2758143 87
>>2757872
смирись, чел. иммутабельность в гошке это когда в комменте написано "не меняйте плз".
>Посоветуйте го-либу для парсинга ямла, где нет такой беды
ну ты в принципе не заанмаршалишь в приватное поле. ну ладно допустим ты затащил весь код парсера в пакет с конфигом, чтобы приватные поля были доступны парсеру. и теперь у тебя конфиг с приватными полями, которые не видны из других пакетов. а теперь ты навешиваешь геттеры на всю эту хуйню. а теперь твой код превратился в жаву
Аноним 07/07/23 Птн 23:05:35 2758154 88
>>2757233
>тут можно io.EOF = nil сделать
Так трудно было final поля сделать, а?
Аноним 07/07/23 Птн 23:09:53 2758161 89
>>2758140
у нас туда засовываются поля для логирования - в хендлере запихиваешь поля из реквеста, там userID хуе-мое, и все внутренние логи будут с ними.
аналогично этому в мидлваре можно положить что-то.
NotifyContext в main.
при консюминге очереди - явные таймауты, чтобы не застопить обработку на какой-то хуйне.
если у тебя сетевой поход во время открытой транзакции в БД (так делать не нужно еба), то тоже надо быть уверенным, что на него есть таймаут.
контекст от ErrGroup также нужно смотреть когда логично использовать, а когда не надо.
Аноним 07/07/23 Птн 23:27:39 2758175 90
>>2757184
>>2758143
>смирись, чел. иммутабельность в гошке это когда в комменте написано "не меняйте плз".

В общем таки пришлось обмазать враппером, который содержит указатель на мутабельную структуру, но вне пакета к мутабельной нет доступа. Олсо, а как обеспечивается иммутабельность полей-слайсов? Т.к. слайс содержит указатель на массив, то даже получив его копию можно заппендить в оригинальный массив, хотя нет прямого доступа к полям-слайсам конфигурации. Возвращаю в геттере новый слайс в который копирую элементы оригинального. Я долбоеб и надо было забить или можно так двигаться в Го?
Аноним 08/07/23 Суб 00:03:21 2758199 91
>>2758143
>теперь у тебя конфиг с приватными полями
>а теперь твой код превратился в жаву
ну как бе с одной стороны да, с другой тем самым можно обезопасить от прострела ноги

можно конечно положить болт, и каждый раз при обращении к конфигу извне возращать копию структуры, а не указатель на нее, но тоже как-то ебано копировать всю структуру ради одного поля
Аноним 08/07/23 Суб 00:25:11 2758213 92
>>2758199
>ну как бе с одной стороны да, с другой тем самым можно обезопасить от прострела ноги
да никто не будет твой конфиг внутри бизнес-логики менять, нахуй это надо. ну т.е. это вообще не-проблема в реальном коде.
если ты хочешь альтернативный вариант, то просто не передавай свой ямловый мегаконфиг дальше main. все типы/пакеты, которые ты там инициализируешь, тупо должны принимать значения нужных себе опций на вход NewZalupa() вместо общего конфига.
>но тоже как-то ебано копировать всю структуру ради одного поля
нуу будет у тебя приложуха на две наносекунды медленее запускаться и жрать на килобайт памяти больше на старте.
Аноним 08/07/23 Суб 13:43:56 2758605 93
изображение.png 3Кб, 236x114
236x114
изображение.png 6Кб, 752x44
752x44
изображение.png 7Кб, 200x208
200x208
Какого хуя этот ваш Холанг идет искать импорты хуй пойми куда, вместо того чтобы заглянуть в папки из которого я запускаю мейн.го!?????
Аноним 08/07/23 Суб 15:14:39 2758722 94
>>2758605
в go.mod модуль как называется?
Аноним 08/07/23 Суб 15:27:59 2758750 95
>>2758605
Вангую путь начинается не с ./
Аноним 09/07/23 Вск 00:20:27 2759301 96
>>2758750
в гоше нет ./, все импорты имеют абсолютные пути.
Аноним 09/07/23 Вск 15:09:24 2759729 97
>>2758213
>да никто не будет твой конфиг внутри бизнес-логики менять, нахуй это надо. ну т.е. это вообще не-проблема в реальном коде.
Ну да конечно. Возьмет слайс с чем нибудь из конфига, отдаст в функцию которая вообще не в курсе что это и откуда и там уже меняет элементы слайса.
Аноним 09/07/23 Вск 15:54:39 2759764 98
>>2759729
ну такое только в синхронном коде получится
Аноним 09/07/23 Вск 17:10:57 2759855 99
По какому принципу горутины синхронизируются каналами?

Допустим, у меня в мейне две одинаковые горутины с двумя каналами: ro[2] и wo. В функции горутины берутся 2 значения из ro и кладется значение в wo. В мейне в канал ro[2] последовательно кладется 4 значения. Никому ведь неведомо в каком порядке они достанутся в горутинах? Я просто решил проверить в цикле и у меня стабильно сначала считается 1 значение из канала в обеих горутинах по очереди, потом 2 значение точно так же. То есть
go XXX: <-ro
go ZZZ: <-ro
go XXX: <-ro
go XXX: wo<-
go ZZZ: <-ro
go ZZZ: wo<

И такой порядок, судя по аутпутам внутри горутин, сохраняется.

Это мне просто повезло получить воспроизводимый результат, или планировщику так дано работать? Или тут вообще не про планировщик, и я сам явно так синхронизировал все?
Аноним 09/07/23 Вск 17:13:44 2759865 100
Аноним 09/07/23 Вск 17:33:27 2759895 101
>>2759855
короче я почти нихуя не понял из твоего описания. но я бы ожидал примерно такое поведение

1. запускается программа
2. спавнит GOMAXPROCS тредов-процессоров. все кроме одного процессора не имеют работы и засыпают (тут на самом деле не уверен и возможно дополнительные процессоры будут спавниться потом по мере. остальные пункты имеют смысл только если это работает так, как я сказал.)
3. main горутина начинает исполнятся
4. все go func() горутины, которые ты делаешь, кладутся в локальную очередь процессора, который исполняет main
5. когда main блочится на чём-то, процессор, который крутил main горутину, берёт последнюю go func() которую ты заспавнил (т.е. очередь горутин не fifo) и начинает выполнять её
6. в какой-то момент остальные процессоры просыпаются и воруют горутины из очереди main процессора.

если ты всегда получаешь один и тот же результат, то возможно оно всё успевает выполниться на одном треде, когда остальные треды спят без работы.
Аноним 09/07/23 Вск 18:37:46 2760014 102
>>2759895
Звучит правдоподобно. Про стек глубиной 1 для свержих горутин читал.
> Все кроме одного процессора не имеют работы и засыпают
Видимо так. Но почему...
Аноним 10/07/23 Пнд 13:41:32 2760718 103
Аноним 11/07/23 Втр 19:33:37 2762305 104
image.png 405Кб, 690x1030
690x1030
Смотрю это чела, очень мощно, 4к баксов в 20 лет.
Основы хорошо объясняет, тоже буду вкатываться на 4к+ баксов. https://www.youtube.com/watch?v=lj4fvjlYgFg
Аноним 11/07/23 Втр 19:39:39 2762312 105
>>2762305
Хм, он даже рос с мамой и бабушкой.
Получется двачеры пиздаболы.
Аноним 12/07/23 Срд 00:34:38 2762555 106
image.png 22Кб, 712x275
712x275
Анон, есть проблемка с отменой контекста и завершением работы приложения. В общем, использую NotifyContext для своей утилиты, если ловлю сигнал от OS, то отменяю контекст, который по цепочке прокидывается во все горутины и функции.
Есть некий воркер, который по тикеру выполняет функцию, которая может уснуть или так же может быть прервана в случае получения сигнала (т.к. пробрасывается контекст). Проблема в том, что сигнал на прерывание от ОС может быть получен в момент, когда функция searchForPost спит (т.е. ждет либо отмены контекста, либо записи в канал <- time.After). Получается, что функция может быть в какой-то момент отменена и ожидается, что DoWork завершится кейсом с ctx.Done. Но тикер за время сна успевает видимо подкинуть еще элемент и он срабатывает первым, в результате функция searchForPost срабатывает лишний раз в каждом воркере перед самым завершением работы утилиты. Не понимаю пока, какой тут паттерн/антипаттерн, как сделать так, чтобы если контектс отменяется, то все селекты с ним мгновенно завершались (ну или схожее поведение)?
Аноним 12/07/23 Срд 00:49:18 2762566 107
>>2762555
ты зафокусился на какой-то супер-редкий кейс, когда тикер и контекст одновременно доступны. селект в этом кейсе выберет рандомный кейс. у тебя скорее всего что-то другое происходит, т.к. отменить контекст именно в момент тика надо умудриться.
что ты можешь сделать - в кейс с тикером добавить проверку if ctx.Err() != nil { return }. но как я и сказал, это супер-редкий кейс и эта проверка тебе 99.99999% не поможет (плюс эта проверка где-то внутри searchForPost должна же уже быть, если оно сетевой поход делает).
Аноним 12/07/23 Срд 00:51:05 2762570 108
>>2762566
а хотя я понял, если у тебя searchForPost блочится и не слушает контекст, а за это время тикер тикает, то да, будешь часто получать такое.
Аноним 12/07/23 Срд 00:53:04 2762573 109
>>2762555
ну и конечно можно из searchForPost вернуть ошибку при отмене контекста и выйти если err != nil.
Аноним 12/07/23 Срд 01:42:37 2762590 110
image.png 24Кб, 674x334
674x334
>>2762570
>>2762566
Спасибо, проверка ctx.Err() != nil решила проблему. Да весь подвох в том, что searchForPost может блокироваться, т.к. упирается в счетчик рейт лимита сетевых вызовов и просто ждет N секунд до сброса лимита. Хорошо бы еще понять насколько легально и разумно блочить функции, вызываемые внутри селекта и которые могут быть прерваны отменой контекста.
>>2762573
searchForPost к сожалению не возвращает ошибки by design, т.к. любой результат ее выполнения считается успешным, а внутренние ошибки просто пишутся в лог. Не хотелось бы ради корректной обработки отмены контекста прокидывать оишбки назад по всему стеку вызовов.
Аноним 13/07/23 Чтв 12:18:35 2764169 111
попросили допилить проект на гошке
бля, как же вам наверно хуево жить без перегрузок, я уже заебался
Аноним 13/07/23 Чтв 16:25:07 2764478 112
>>2764169
Без перегрузок операторов грустно бывает свои числовые типы вроде денег создавать, а перегрузки методов не нужны
Аноним 13/07/23 Чтв 16:39:31 2764507 113
>>2764478
makeSomeShitInt
makeSomeShitFloat
"Заставь дерьмо всплыть", ичсх, оно всплывает
Аноним 13/07/23 Чтв 19:57:49 2764856 114
>>2764507
Я привел пример где на практике нужна перегрузка операторов, жду от тебя реального примера где это нужно laba1 не считается
Аноним 13/07/23 Чтв 23:08:27 2765136 115
>>2764856
Чел блядь я тебе настроение поднять пытаюсь
Аноним 14/07/23 Птн 04:20:20 2765241 116
>>2764507
Называется дженерики, и они у нас есть
Аноним 14/07/23 Птн 16:25:18 2765876 117
Даны два канала, из обоих можно прочитать конечную неубывающую последовательность целых чисел. Необходимо объединить два канала в один канал, который так же генерит неубывающую последовательность.
Подзастрял с этой задачей, нашел решение только с промежуточным вычитанием исходных каналов в слайсы и последующей отправкой в результирующий канал.
https://go.dev/play/p/Y7lZmdMnGOU
Вроде и норм, но по памяти накладные расходы и пайплайн по сути блокируется до момента окончания записи в исходные каналы. Можно ли сделать как-то на селекте, без ожидания полной вычитки каналов? А если последовательность условно бесконечная?
Аноним 14/07/23 Птн 16:43:10 2765908 118
>>2765876
так же, как два мосива смержить.
читаешь по одному значению из двух каналов. пишешь в выход то, что меньшее (допустим это был канал А). читаешь из канала А, пока он возвращает значения <= значения из Б и кладешь в выход. когда значение попалось больше, то кладеш то большее из Б и читаешь из Б с тем же условием.
Аноним 16/07/23 Вск 09:19:33 2768273 119
Как вы пишете интеграционные тесты (на моках)? Например у пакета есть экспортнутый метод, который под капотом зовет внутренний метод пакета, который под капотом делает http-запроса. URL запроса берется из конфигурационного файла, а за конфиг отвечает отдельный пакет. Про httptest в курсе, но там два пути: либо подставлять в реквест http-клиента URL тестового сервера, либо подменить url у тестового сервера, на тот, чито указан в тестовой конфигурации. Второй подход вроде как рисковый, т.к порт может быть занят на момент прогона тестов. Первый же выходит через какие-то костыли с глобальными переменными и манки патчингом. Бля, хоть свой спринг пиши.
Аноним 16/07/23 Вск 09:24:25 2768277 120
>>2768273
Конечно можно конфу передавать в каждый метод через контекст/аргумента (а сам аргумент подставлят ьв тестах), либо написать отдельный конфиг для тестов, но должно же быть что-то проще.
Аноним 16/07/23 Вск 10:54:49 2768348 121
Аноним 16/07/23 Вск 14:21:56 2768516 122
>>2768348
Зачем этот высер слияния каналов с рандомными интами? Проблема в чтении каналов в определенном порядке, который может меняться в зависимости от поступающих значений
Аноним 16/07/23 Вск 14:46:57 2768549 123
Ребят а вам не страшно что телефон без влагозащиты? Вот ща дождик идет и я чет задумался, а как им пользоваться то на улице?
Надо было брать самсунг а54....
Аноним 16/07/23 Вск 15:17:09 2768575 124
>>2768273
>манки патчингом
У нас так тестится.
Аноним 16/07/23 Вск 15:42:36 2768611 125
>>2764169
Можешь пщ+ попробовать, там всё есть
Аноним 16/07/23 Вск 16:28:06 2768687 126
Аноним 16/07/23 Вск 16:42:59 2768714 127
>>2768273
>"""интеграционные тесты (на моках)"""
у тя сложные тесты какие-то.
ну типа если нужен порт, то ты всегда можешь с ретраями подобрать свободный, и если хочешь тестабилити не нужно порт хардкодить/читать из конфига. а вообще если это всё на моках, то нахуй это интеграционный тест
Аноним 16/07/23 Вск 22:14:51 2769238 128
>>2768714
Такой проектик, юнит тесты хороши для бизнес логики, когда можно изолированно от других слоев тестировать. А если есть сеевые вызовы внутри логики, то как без моков.
Аноним 16/07/23 Вск 22:29:53 2769268 129
>>2769238
если у тебя все сетевые вызовы замоканы, то это не интеграционный тест
Аноним 17/07/23 Пнд 00:41:40 2769315 130
>>2769268
Скорее это вопрос устоявшейся терминологии. Под интеграциюнными понимают тесты, которые задействуют несколько слоев/модулей приоложения. Например ты хочешь протестировать слой-репозиторий, для этого мокаешь запросы к БД. Тоже самое с сетевыми вызовами. Юнит-тесты это тестирование изолированной функциональности в рамках одного модуля. Например тестирование функции, которая делает какие-то расчет, без сайд эффектов. То, что ты называешь интеграционными это системное тестирование или end-to-end, когда тестируется на стенде. Другое дело, что как в моем случае у меня нет чистых функций практически, все завязано на коннекты.
Аноним 17/07/23 Пнд 01:28:58 2769329 131
>>2769315
но в моем случае скорее херовый дизайн, т.к. компоненты связаны внутри методов
Аноним 17/07/23 Пнд 03:40:46 2769357 132
>>2768273
Почему бы не мокнуть http-клиент полностью?
мимошел
Аноним 17/07/23 Пнд 19:13:13 2770381 133
У меня есть директория с файлом go.work. В директории есть несколько модулей, которые содержат пакеты. Как мне импортировать пакет components из модуля tables в модуль data?
import "go.work/tables/components" не работает (это гопота предлагала)."tables/components" тоже. "./tables/components" запретили давно.
Аноним 17/07/23 Пнд 23:32:16 2770688 134
>>2768273
>Как вы пишете интеграционные тесты (на моках)?
Никак. Интеграционные тесты - проверяют интеграцию между разными компонентами. В интеграционном тестировании поднимаются реальные инстансы всех компонентов, максимум можно мокать внешние системы. Но предпочтительней, чтобы у них была внешний UAT.
Аноним 18/07/23 Втр 01:22:51 2770735 135
Аноним 18/07/23 Втр 01:25:14 2770736 136
>>2769315
да, у нас терминология другая.
допустим, у тебя есть тип А с логикой, завязанный (через интерфейс) на тип Б. если ты тестируешь отдельно метод у А, мокая Б, то это юнит-тест, независимо от того, делает ли реальный Б под капотом сетевые вызовы или это тупо какой-то калькулятор. аналогично тесты для репозитория без поднятия БД, т.е. любые тесты без внешних зависимостей это юнит-тесты.
интеграционные - когда нужно поднять бд/редис/очередь и тупо go test ./... не пройдёт. вызовы в другие сервисы по хорошей практике все равно мокаются.
системные/е2е - когда ходим в реальные внешние зависимости.
Аноним 18/07/23 Втр 02:00:51 2770750 137
image.png 275Кб, 1500x1000
1500x1000
Аноним 18/07/23 Втр 02:12:57 2770756 138
>>2770735
->
>>2770381
Попробовал, если сделать replace, то пакет импортировать можно как обычно "some/module/pkg"
Аноним 18/07/23 Втр 02:16:07 2770758 139
>>2770736
Вы как-то разделяете тесты внутри проекта? Наприме юнит тесты в _test файлы, а интеграционный в _it_test?
Аноним 18/07/23 Втр 10:06:49 2770923 140
>>2770758
я обычно разделяю, интеграционные в _integration_test.go (+ билд флаг в них), юниты в _test.go. хотя обычно один пакет не тестируется одновременно юнитами и интеграционными и порой можно видеть интеграционные в _test.go
Аноним 18/07/23 Втр 11:33:55 2771033 141
Screenshot from[...].png 15Кб, 361x313
361x313
Screenshot from[...].png 1Кб, 177x31
177x31
Почему так?

Отчего он игнорирует y и не аппендит 3 к слайсу
А вот к z аппендит 4
Аноним 18/07/23 Втр 12:33:50 2771182 142
>>2771033
Апендит, но затем перезаписывает. Гугли устройство слайса, там у всех 3-х слайсов "под капотом" один и тот же массив
Аноним 18/07/23 Втр 14:50:00 2771462 143
image.png 38Кб, 1328x397
1328x397
>>2770756
Что-то у меня такого фокуса не получается. Как там путь прописать?
Аноним 18/07/23 Втр 15:01:43 2771501 144
image.png 34Кб, 1289x361
1289x361
>>2770756
Распердолил, спасибо за помощь.
Аноним 18/07/23 Втр 19:18:36 2771948 145
>>2771033
https://go.dev/play/p/CErOI1HrNXq
И не перетрет, если в результате аппенда будет создан новый массив.
Этот момент в Го напрягает, конечно, если в коде акробатика со слайсами. 10 раз подумаешь, а стоит ли аппендить в этот слайс или создать новую копию. Чому не завести было высокоуровненвые абстракции?
Аноним 18/07/23 Втр 21:34:23 2772115 146
>>2771948
> 10 раз подумаешь, а стоит ли аппендить в этот слайс или создать новую копию.
Такая и была цель, чтобы не делать неявно О(n) операции
> Чому не завести было высокоуровненвые абстракции?
Например как?
Аноним 18/07/23 Втр 22:25:14 2772213 147
>>2772115
>Например как?
Например как в нормальных языках - List. Который при добавлении элемента растет внутри, но сама ссылка на List остается актуальной. А еще можно сделать 2 интерфейса - mutable и immutable. А ещё можно всякую функциональщину типа map завезти.

Ладно, это я увлекся, это все не говей, ебитесь с кучей бойлерплейта и не жалуйтесь.
Аноним 19/07/23 Срд 09:43:53 2772617 148
>>2772213
> Например как в нормальных языках - List
В нормальных языках никто алокации не считает и срут в хип всем чем только можно. В го же подобную структуру можно реализовать на основе слайса очень просто, но в отличии от слайса она никогда не будет на стеке, т.к. нужны поинтеры

> А ещё можно всякую функциональщину типа map завезти.
Уже
Аноним 19/07/23 Срд 09:47:20 2772627 149
>>2772617
Нет, чел. Это в с++ ты можешь языковыми средствами реализовать вектор и хештеблицу и любую другую структуру данных. А у вас долбоебы сделали частью языка хэштаблицу, это же уровень php
Аноним 19/07/23 Срд 10:01:45 2772651 150
>>2772627
>это же уровень php
В 1с тоже хештаблица часть языка, причем используется везде где в си и go используется struct, потому что в 1с нет структур в привычном понимании, динамикодрисня же.
Причём в доках нигде не написано что это хештаблица, но по контексту можно догадаться.
Эх...
Аноним 19/07/23 Срд 12:28:31 2772881 151
>>2772627
а что тебе мешает реализовать хештаблицу языковыми средствами? компилятор гошки на гошке написан, да и язык тюринг-полный
Аноним 19/07/23 Срд 23:01:16 2773986 152
Аноним 19/07/23 Срд 23:25:38 2774008 153
>>2772617
>В нормальных языках никто алокации не считает и срут в хип всем чем только можно. В го же подобную структуру можно реализовать на основе слайса очень просто, но в отличии от слайса она никогда не будет на стеке, т.к. нужны поинтеры
Ты совсем ебанат который вообще не шарит?
Слайс аллоцирует в куче массив, а на стеке указатели на массив, длину и сегмент. Джава или Шарпе будет делать ровно то же самое, только структура указатели на массив, длину и сегмент будет тоже аллоцирована на стеке, что позволяет не ебаться с
>slice = append(slice, newElement)
а просто
>list.add(newElement)
Разница в аллокации памяти мизерная. Массив для хранения данных и там, и там в куче. Ресайзится кратно текущему размеру амортизированное O(n) для тех кто шарит. Нету нихуя у слайсов, каких-то преимуществ перед List.

>Уже
И как мне []string преобразовать в []Yoba в функциональном стиле?



>>2772627
>А у вас долбоебы сделали частью языка хэштаблицу, это же уровень php
Аутистам у кого Го первый язык, это не понять.
Аноним 20/07/23 Чтв 00:57:44 2774114 154
>>2774008
> Слайс аллоцирует в куче массив, а на стеке указатели на массив, длину и сегмент. Джава или Шарпе будет делать ровно то же самое, только структура указатели на массив, длину и сегмент будет тоже аллоцирована на стеке, что позволяет не ебаться с
ну вообще-то слайс и на стеке может быть аллоцирован полностью, включая внутренний массив, если он не убегает и ты подходящий размер укажешь.
Аноним 20/07/23 Чтв 01:00:00 2774116 155
>>2774008
про эскейп анализ чмоха не слышала ничего;):)::):
Аноним 20/07/23 Чтв 10:27:07 2774365 156
>>2740805 (OP)
Вкатываюсь в го, синтакс более менее освоил
Сейчас начал делать "пет проект". Фантазии нет, делаю абсолютно бесполезную хуйню
Цимес в том, что в моём проекте на Go буквально 40 строк, остальное делает JS. Это вообще норм или рекрутеры скажут что с такими приколами чтобы шёл на js разраба? Ещё планирую прикруть базы данных, но там тоже не сильно сложно
Аноним 20/07/23 Чтв 10:30:40 2774375 157
Аноним 20/07/23 Чтв 10:32:02 2774377 158
>>2774365
>Ещё планирую прикруть базы данных, но там тоже не сильно сложно
Обязательно прикручивай, иначе нахуя тебе вообще бекенд?
Чтобы было больше, делай не с гормами, а с чистым sql
Тем более что в проде зачастую так оно и происходит
Аноним 20/07/23 Чтв 10:46:15 2774400 159
>>2774365
Еще какой нить брокер подключи, например rmq, так же можешь еще подрубить эластик серч.
Аноним 20/07/23 Чтв 11:05:56 2774435 160
>>2774377
>>2774400
Понял, спасибо
Хочу вкатиться на джуна и основной упор сейчас на алгоритмы и структуры данных, а дальше ещё паттерны хотя бы по верхам нужно освоить и всякие kubernetes, docker...
Проект делаю когда есть вдохновение.
Аноним 20/07/23 Чтв 11:34:55 2774484 161
>>2774365
Сейм стори, тоже вкатываюсь, один сервис почти допилил, планирую еще парочку и интеграцию между ними сделать по rest и черезь очередь, в сумме должно норм быть.
Аноним 20/07/23 Чтв 11:52:44 2774521 162
>>2774377
В go правда большинсто проектов не использует ORM?
Имел опыт в джаве с этим самым хибернейтом, так и не проникся философией ORM. Чтобы написать, что-то чуть сложнее круда приходится все равно писать sql только через обертки orm-мовские и еще проблема n+1 из коробки. В го с orm такая же история?
Аноним 20/07/23 Чтв 11:53:30 2774524 163
>>2774435
А почему на джуна? В одном из прошлых тредов советовали перекатываться на мидла сразу с других языков. Или ты без опыта?
Аноним 20/07/23 Чтв 12:03:50 2774545 164
>>2774524
Без опыта и не профильное образование учитель музыки. Сейчас учусь заочно на программиста параллельно совмещая с работой и заодно готовлюсь к собесам, если меня на них ещё позовут...
Аноним 20/07/23 Чтв 12:06:16 2774554 165
>>2774545
>учитель музыки
Уроки на фортепьяно даёшь?
Мне бы не помешал ментор типа на одно занятие в неделю-две
Аноним 20/07/23 Чтв 12:16:53 2774574 166
>>2774545
А зачем из творческой сферы ты идешь в унылое программирование, где придется по 12 часов сидеть за ПК и все свободное время так же заниматься программированием?
Аноним 20/07/23 Чтв 12:23:20 2774584 167
Аноним 20/07/23 Чтв 15:10:12 2774843 168
Аноним 20/07/23 Чтв 23:24:46 2775523 169
>>2774114
>>2774116
Таки и в C#/Java эскейп анализ тоже есть, и JIT тоже может на стеке аллоцировать. Просто ты мудило, не можешь в контекст.
>10 раз подумаешь, а стоит ли аппендить в этот слайс или создать новую копию.
Подразумевает, что слайс пробрасывается куда-то наружу, явно за пределы эскейп анализа.
Аноним 21/07/23 Птн 01:14:00 2775627 170
>>2775523
Твоя мать грязная тупая шлюха. Высрал тейк, обосрабся. Что-то говорит про контактст. Иди дальше на днище работу джейсоны кидать.й
Аноним 21/07/23 Птн 02:14:57 2775652 171
>>2775523
и ни слова об эскейпе со стека в цитате. что подразумевается? куда наружу?
Аноним 21/07/23 Птн 11:06:13 2775900 172
>>2740805 (OP)
Для особо тупых:
Одна из распространенных жалоб на Go заключается в том, что обработка ошибок слишком многословна. Это абсолютно верно; каждый раз, когда вы видите, что функция возвращает ошибку, вы должны проверить, является ли ошибка нулевой, и правильно ее обработать. Языки, которые используют исключения для обработки условий ошибок, не делают явную проверку ошибок, что часто приводит к хрупким программам, которые плохо справляются с обработкой ошибок. Делая ошибки настолько заметными, Go побуждает разработчиков поступать правильно и создавать более надежные программы.
Аноним 21/07/23 Птн 12:06:33 2775951 173
>>2774521
>ORM
Не смей в приличном обществе такое спиздануть - обоссут и переведут в чуханы
Аноним 21/07/23 Птн 15:11:43 2776257 174
Аноним 21/07/23 Птн 18:32:36 2776629 175
>>2775900
В результате чего имеем всякие MustCompile() и сранье в аутпут при ошибках в шаблоне sprintf.

Насчёт должен обработать, у Джавы есть checked exception. И как показала практика - говно идея, только засирает код. Проще на верхнем уровне ловить панику/эксепшены и писать их в лог.
Аноним 21/07/23 Птн 21:13:10 2776841 176
>>2776629
Ваше мнение очень важно для нас
Аноним 22/07/23 Суб 00:03:46 2777048 177
>>2776629
Собственно обработка check exception и есть тот самый err != nil
Ошибки "не check" ловится могут на самом верхнем уровне без каких-либо дополнительных усилий, т.е. это и есть своего рода паника.
Я бы не сазал, что явные экеспшены как-то засирают код, другое дело, что конструкции для ловли могут побудить использовать их как условные операторы для разруливания веток кода, что не есть хорошо. Кмк, в Го как раз решена эта проблема, ловишь в defer recover и выполнение на этом функции завершвается в любом случае или в if err != nil, где явно делаешь возврат.где пишешь простыню с резервным сценарием
Аноним 22/07/23 Суб 10:56:14 2777277 178
>>2775652
>и ни слова об эскейпе со стека в цитате. что подразумевается? куда наружу?
Очевидно что со слайсом который создан внутри метода и используется только внутри метода не возникает вопросов
>а стоит ли аппендить в этот слайс или создать новую копию
Речь явно идет про слайс который или получен снаружи, или прокидывается куда-то внутрь и непонятно что там с ним дальше будет.
Аноним 22/07/23 Суб 11:17:58 2777306 179
>>2777048
>Собственно обработка check exception и есть тот самый err != nil
Только в Джаве можно один раз написать throws ZalupaException, а в Го каждый раз ебаться с
if err != nil {
return nil, err
}


>Кмк, в Го как раз решена эта проблема, ловишь в defer recover и выполнение на этом функции завершвается в любом случае или в if err != nil, где явно делаешь возврат.
panic-recover это и есть throw-catch в чистом виде. Более того его сами авторы Го используют его именно таким образом.
Аноним 22/07/23 Суб 18:29:54 2777855 180
>>2777306
>каждый раз ебаться с
if err != nil {
return nil, err
кидай панику, если уверен, что ошибка на самый вверх должна пойти и с жизнью не совместима

Иначе ты все равно будешь писать if err != nil, только используя try catch
Аноним 22/07/23 Суб 18:49:39 2777877 181
>>2777306
>Только в Джаве можно один раз написать throws ZalupaException, а в Го каждый раз ебаться с
да не обязательно. для всех функций с ошибками тупо скипаешь ошибку v, _ := zalupa() и когда-нибудь паникнешь. ну и в мейне просто такой же дефер на всё-всё как в твоей джаве))
Аноним 22/07/23 Суб 18:52:31 2777881 182
MARIMARIEN-1672[...].mp4 1896Кб, 480x534, 00:01:30
480x534
погодите
а что
а что если

...если бы было так что


а что если... если бы было так что когда пишешь v, _ = ... в кейсах когда err != nil, то это бы приводило к панике?
Аноним 22/07/23 Суб 21:11:13 2777999 183
>>2777881
Лучше бы приводило к возврату ошибки, если функция её возвращает, и к панике если нет. И пустой идентификатор уже используется, лучше новый токен взять, например знак вопроса.
Осталось только придумать как добавлять контекст в таком случае
Аноним 22/07/23 Суб 23:32:19 2778086 184
Как же тошнит от джавы, но это говно еще хуже. Неужели анальники не могут родить какой-то нормальный язык программирования.
Аноним 22/07/23 Суб 23:35:25 2778089 185
>>2777855
>кидай панику, если уверен, что ошибка на самый вверх должна пойти и с жизнью не совместима
Увы и ах, код-ревью не пройдет. Паниковать можно только в ситуациях инициализации на старте и тестах. В нормальном режиме паниковать нельзя. Пример их жизни, парсим строку регуляркой \d+, потом ее Atoi в число. Понятно что не должно быть ошибки, но тем не менее код-ревью завернули. Нехер паниковать в прод коде.

>>2777877
>да не обязательно. для всех функций с ошибками тупо скипаешь ошибку v, _ := zalupa() и когда-нибудь паникнешь. ну и в мейне просто такой же дефер на всё-всё как в твоей джаве))
В джаве можно ловить ошибку, а потом ее тупо перебрасывать с сохранением стектрейса, в Го - хуй вам. Бросай новый и ебись с логированием старого стектрейса. В фреймворках у тебя нет майна, есть минимальный контроль над обработкой ошибок.


>>2777855
>>2777877
Это все к чему. Говей это ебстись с if err != nil { любой другой выебон с panic-recover создает проблемы с поддержкой кода.


>>2777999
С одной стороны да, можно уменьшить боейлерплейт, а с другой будет отсутствовать дополнительная ишва. Напримиер ты в 3-х местах ты читаешь из базы и у тебя появляется DB: syntax error, как понять где?
Аноним 23/07/23 Вск 21:54:54 2778896 186
>>2778089
>Увы и ах, код-ревью не пройдет.
Весьма странно
В том же effective go приводится пример когда с паникой прокидывается ошибка с кастомнын типом (аля MyCustomErr extends Runtime Exception)
В defer получаешь из recover ошибку и чекаешь тип, если кастомный, то обрабатываешь, если нет, т опаникуешь дальше
https://go.dev/doc/effective_go#errors
Аноним 24/07/23 Пнд 22:55:31 2780272 187
>>2778896
>В том же effective go приводится пример когда с паникой прокидывается ошибка с кастомнын типом (аля MyCustomErr extends Runtime Exception)
Во первых они сами пишут, что это на крайний случай, если прям совсем не можешь продолжить работу:
>This is only an example but real library functions should avoid panic. If the problem can be masked or worked around, it's always better to let things continue to run rather than taking down the whole program. One possible counterexample is during initialization: if the library truly cannot set itself up, it might be reasonable to panic, so to speak.
У нас тоже можно паниковать в ините если критичная проблема, а вот панику в методе библиотеки мне завернули, хотя по идее она и не должна в нормальной ситуации произойти.
Аноним 25/07/23 Втр 04:31:02 2780386 188
aBn1pA2460s.jpg 36Кб, 460x595
460x595
добавят ли классы в голанге в 2.0 или раньше?
Аноним 25/07/23 Втр 09:55:12 2780463 189
Нет ли плагина, чтобы в VS code создавать заглушки для методов типа, который имплементит интерфейс?
Может это все не говей, но в идейке было удобно, когда онасама клепала заглушки методов.
Аноним 25/07/23 Втр 10:58:00 2780501 190
>>2780386
Какой функциональности классов тебе не хватает?
Аноним 25/07/23 Втр 12:20:27 2780618 191
Аноним 25/07/23 Втр 14:02:19 2780795 192
>>2780501
Есть почти всё, но реализовано так что куча кода на ровном месте.
Нет конструкторов, поэтому приходится делать тип приватным, объявлять интерфейс включая все геттеры/сеттеры hello Java my old friend и писать New() метод.
На уровне языка нельзя сказать, что тип реализует интерфейс, надо костылить через присваивание.
Нет иммутабельных данных, так что вся надежда на сознательность вызывающего.
Нет нормального наследования, создать базовый класс и чтобы кому надо расширял его нельзя.
Аноним 25/07/23 Втр 14:12:55 2780812 193
>>2780795
>Нет конструкторов, поэтому приходится делать тип приватным, объявлять интерфейс включая все геттеры/сеттеры
кринж
>На уровне языка нельзя сказать, что тип реализует интерфейс, надо костылить через присваивание.
зачем?
>Нет нормального наследования, создать базовый класс и чтобы кому надо расширял его нельзя.
так это плюс
Аноним 25/07/23 Втр 14:35:46 2780860 194
>>2740805 (OP)
А зачем го вообще нужен? Думал для бэка а на деле он чуть ли не для операционок используется
Аноним 25/07/23 Втр 15:50:06 2780946 195
Аноним 25/07/23 Втр 18:37:16 2781237 196
>>2780946
Тогда следующий резонный вопрос. Почему у маскота голанга вместо глаз сиськи?
Аноним 25/07/23 Втр 19:16:22 2781302 197
Признавайтесь, как вы на этом говнище пишете?
Аноним 25/07/23 Втр 21:51:00 2781520 198
>>2780812
>лол
>чо?
>кек
Типичный гопник.
Аноним 25/07/23 Втр 21:52:03 2781522 199
>>2781302
>Признавайтесь, как вы на этом говнище пишете?
За большие деньги иначе бы уже уволился
Аноним 26/07/23 Срд 05:37:21 2781701 200
image.png 372Кб, 459x753
459x753
Перекат с жабы - чек.
Как вы пишите интеграционные тесты для репок?
Используете sqlite или поднимаете локальный инстанс целевой базенки?
А схемы БД чем мигрируете?
Аноним 26/07/23 Срд 09:05:52 2781786 201
Насколько кощщунественно делать десктопы с Fyne??
Аноним 26/07/23 Срд 14:02:03 2782195 202
>>2781701
>Используете sqlite или поднимаете локальный инстанс целевой базенки?
в ci поднимается постгрес в докере, накатываются миграции, и тесты работают с этой базой. для локальных тестов - аналогично, только в миникубе.
>А схемы БД чем мигрируете?
хз, какой-то отдельный контейнер есть, который накатывает всё.
Аноним 27/07/23 Чтв 10:07:39 2783474 203
>>2740805 (OP)
Всем привет! Какой сейчас стандартный стэк на Go для бэкенда?
Что брать как фреймворк, какую ORM, структура проекта итд

Хочу вкатиться с Python/FastAPI/DRF
Аноним 27/07/23 Чтв 11:06:12 2783541 204
>>2783474
>какую ORM
Скрой тред и удали из избранного.
Аноним 27/07/23 Чтв 11:30:42 2783568 205
>>2783541
А вы разве GORM не используете?
Аноним 27/07/23 Чтв 11:43:41 2783581 206
>>2783568
Чтобы через него прокидывать sql?
Аноним 27/07/23 Чтв 12:14:54 2783632 207
>>2783581
Ну там для примитивных крудов, типа накидал структуру и прикрутил к ней интерфейс, добавил теги или передел в метод хз как у вас там и готово, работаешь со структурой как с таблицей. Или в го такое не актуально и тупо везде голые sql запросы?
Мимо
Аноним 27/07/23 Чтв 13:21:49 2783798 208
Есть ли в целом в ГОшке вакансии для челов без предварительного опыта в бэкенд разработке?
Сам занимаюсь бч разработкой на Solidity два года, хочу расширять стек. В бч-сфере преимущественно вижу разработку бэка на ноде, либо разработку бч на той же гошке. Есть, конечно, и разработка на расте, но там смертью пахнет.
Аноним 27/07/23 Чтв 13:28:58 2783817 209
>>2783798
Ну, гипотетически я какой-то опыт могу наработать в рамках компании, но у нас основной стек всё таки ноде.жс
Аноним 27/07/23 Чтв 21:29:12 2784670 210
>>2783474
Сам только вкатываюсь, но во что получается по результатам ресерча:
Sql - PostgreSql
No-sql, кэши - redis, MongoDB
Транспорт - kafka, rabbitMQ, grpc
web-фрейворк - gin
Тестирование - пакеты testify, тулза gomock
Контейнеры, облачные сервисы - docker, kuber, aws

Остальное так понимаю покрывается стандартной либой + пакетами от третьих лиц
Аноним 28/07/23 Птн 00:28:29 2784842 211
>>2784670
И чем это отличается от питухона/сисярпа/етц, кроме фреймворка и тестов, заточенных под конкретный язык?
Аноним 28/07/23 Птн 00:48:00 2784844 212
>>2784842
А должны быть отличия?
бэкенд такой бэкенд
Аноним 28/07/23 Птн 13:35:39 2785361 213
>>2784842
Тем что SQL нужно зачастую руками писать + ошибки руками обрабатывать. В общем то и всё
Аноним 28/07/23 Птн 13:57:01 2785423 214
чем golang лучше python/django?
Аноним 28/07/23 Птн 15:21:13 2785566 215
>>2785423
Если нет высоких нагрузок, то ничего лучше питона еще не придумали.
А так - компилируемость, статическая типизация, удобная работа с многопоточностью, отсутствие GIL.
Аноним 28/07/23 Птн 16:06:54 2785671 216
>>2785361
А в питухоне не нужно скл руками писать, если алхимию не хочется тянуть? Или городить свои экспешн_хэндлеры на каждый сетевой пук?
Аноним 28/07/23 Птн 16:53:42 2785761 217
Аноним 28/07/23 Птн 16:55:52 2785766 218
>>2785361
Джангодебил, ты совсем упоролся?
Аноним 28/07/23 Птн 21:28:20 2786248 219
image.png 139Кб, 600x239
600x239
Аноним 28/07/23 Птн 22:23:58 2786346 220
Аноним 28/07/23 Птн 23:04:14 2786411 221
>>2786346
А был бы суслик он бы неплохо так питона порвал
Аноним 28/07/23 Птн 23:43:14 2786468 222
>>2783568
>А вы разве GORM не используете?
Мы в Spanner храним proto, нам этот ваш GORM не нужен.
Аноним 29/07/23 Суб 00:01:14 2786485 223
2023-07-28 22.5[...].png 383Кб, 966x648
966x648
Аноним 29/07/23 Суб 15:01:33 2786951 224
стоит ли вообще заниматься данным нахрюком программирования? Чем он лучше раста? Какие в нем подводные?
Аноним 29/07/23 Суб 15:04:33 2786958 225
>>2786951
до этого был только php и nodejs
Аноним 29/07/23 Суб 20:43:45 2787318 226
>>2786951
что ты хочешь получить? ну вот мне язык нравится и еще зп платят. стоит ли не стоит?
Аноним 29/07/23 Суб 21:12:58 2787394 227
>>2787318
ну допустим если перекатиться с php+laravel на го то я ничо не проебу?? Деняк побольше дадут?
Аноним 29/07/23 Суб 21:49:52 2787412 228
>>2787394
> ничо не проебу
Скорость разработки и не сырые инструменты
Аноним 29/07/23 Суб 22:16:49 2787427 229
>>2787412
Ок. чем го лучше раста?
Аноним 29/07/23 Суб 22:31:26 2787441 230
>>2787427
У них разные ниши, не совсем правильно сравнивать. Но если так, то го проще намного для разработчика. Ну и он всё же ближе к вебу, а раст больше в системщину
Аноним 29/07/23 Суб 22:39:24 2787448 231
>>2787441
Ок. Где больше платят, в системщине или веб??
Аноним 29/07/23 Суб 22:53:34 2787451 232
>>2787448
>Ок. Где больше платят, в системщине или веб??
Навинающие в веб больше делают. Но топовые специалисты ценятся в системном программировании.
Аноним 29/07/23 Суб 22:59:44 2787454 233
Аноним 30/07/23 Вск 00:23:53 2787523 234
>>2787451
>топовые специалисты ценятся в системном программировании
Следует добавить что для этой хуйни особый склад ума нужен. У меня в кругу буквально пара человек этим занимается, один из них дохуя востребованный спец, года в 23 в Японию в соляного перекатился вообще без проблем.
Аноним 30/07/23 Вск 02:20:38 2787576 235
>>2787394
ну гошка это по сути новая пыха. юзкейсов больше, но 99% вакух будет по сути тот же бэкенд.
идти в раст это все равно то же, что уходить в плюсы - графика, системка и те штуки, которые раньше писались на плюсах/сях, чтобы було быстро. так что можешь вернуться на 15 лет назад и подумать куда ты хочешь.
Аноним 30/07/23 Вск 14:04:13 2787809 236
image.png 140Кб, 1226x1270
1226x1270
Аноним 30/07/23 Вск 14:18:25 2787839 237
>>2787809
Никакой хитрости нет, у массива длины n самый большой индекс это n-1, т.к. первый индекс - 0
Аноним 30/07/23 Вск 14:42:19 2787873 238
>>2787809
за тем же, зачем j := i+1 и почему сложность (n-1) * (n-1)
Аноним 30/07/23 Вск 22:23:34 2788490 239
>>2787809
>Может кто объяснить зачем тут len-1? чет слышал что в гошке есть какая-то хитрость с жтим.
Нет никакой хитрости в Еошке, это просто алгоритм такой.
Пусть у тебя есть слайс [0, 1, 2, 3, 4] ты берешь первый цикл по [0, 1, 2, 3], а второй по первый + 1.
Аноним 30/07/23 Вск 22:25:23 2788496 240
>>2787839
>Никакой хитрости нет, у массива длины n самый большой индекс это n-1, т.к. первый индекс - 0
Там строго меньше, это значит что они итерируются до предвоследнего.

>>2788490
>а второй по первый + 1.
а второй от первый + 1 до последний.
Аноним 30/07/23 Вск 22:46:12 2788525 241
>>2787576
как-то грустно, что только пыха
Но вроде бы веб/микросервисы в современном мире - это и есть 99% вакух, вне зависимости от языка?
Еще криптостартапы на гошке пилят
Аноним 30/07/23 Вск 23:08:16 2788542 242
>>2788525
Можно инфу еще делать (имхо это самое интресное).
Аноним 30/07/23 Вск 23:15:13 2788547 243
Аноним 31/07/23 Пнд 08:13:54 2788679 244
>>2788547
Да понятно что ты там пытался сказать, не мучайся
Аноним 31/07/23 Пнд 22:00:24 2789754 245
Подскажите как пофиксить,

```
package kata


func StringToArray(str string) []string {
arr := []string{}
for i := 0; i < len(str); i++ {
if str != " " {
arr = append(arr, string(str))
}
}
return arr
}

./solution.go:7:22: invalid operation: str != " " (mismatched types byte and untyped string)
```
Аноним 31/07/23 Пнд 22:19:40 2789760 246
image.png 309Кб, 460x595
460x595
>>2789754
ебани str != nil вместо str != ""
Аноним 31/07/23 Пнд 22:53:59 2789781 247
>>2740805 (OP)
Вот что заставляет людей писать "err" вместо "error"?
Аноним 31/07/23 Пнд 22:57:25 2789783 248
>>2789781
>Вот что заставляет людей писать "err" вместо "error"?
var nil = "fuck you!"
Аноним 31/07/23 Пнд 22:59:12 2789788 249
Аноним 31/07/23 Пнд 23:03:18 2789792 250
>>2789783
Ну хорошо, а что заставляет людей писать "var"? Страх, что код не скомпилируется?
Аноним 31/07/23 Пнд 23:06:59 2789796 251
>>2789788
Спасибо, попробую решить.
Аноним 31/07/23 Пнд 23:25:37 2789808 252
>>2789796
Походу парсер сожрал скобки, я понял в чем проблема.
Ты неправильно работаешь со строками. Го это тебе не Джава, тут свои оригинальные решения. Строка это не последовательность символов, строка это последовательность байт, которые являются строкой в UTF-8. Соответсвенно str{n} скобки квадратные, а не фигурные это N-ый байт, а не символ. Работать с символами надо по другому.

https://go.dev/play/p/3-PsDpCSDJf
Аноним 31/07/23 Пнд 23:29:43 2789812 253
>>2789792
>Ну хорошо, а что заставляет людей писать "var"? Страх, что код не скомпилируется?
То что это объявление на уровне пакета. Ты вообще местный йумор не оттдупляешь.
Аноним 31/07/23 Пнд 23:31:21 2789815 254
>>2789808
Как такие задачи решать, если не знал про всякий utf8 encoding и так далее? Смотреть ответ, а потом аналогичные решать самому?

Какая у тебя зп?
Аноним 31/07/23 Пнд 23:46:03 2789824 255
image.png 6385Кб, 4032x1860
4032x1860
>>2789815
>Как такие задачи решать, если не знал про всякий utf8 encoding и так далее?
Гуглишь проблему, в данном случае что-то типа
google://golang string nth element
Там будет что-то типа: https://medium.com/@kdnotes/when-i-index-a-go-string-at-position-n-why-dont-i-get-the-nth-character-cfc03e0af541
где будет
>To answer the question posed at the beginning: Strings are built from bytes so indexing them yields bytes, not characters.
там же
>“Code point” is a bit of a mouthful, so Go introduces a shorter term for the concept: rune.
Из чего можно сделать вывод, что надо почитать про rune и как строку разбить на rune. Код который я привел это копипаста кроме if и документации к пакету unicode/utf8.

>>2789815
>Какая у тебя зп?
Норм.
Аноним 01/08/23 Втр 01:05:28 2789864 256
Аноним 01/08/23 Втр 02:34:06 2789871 257
>>2789792
Смех смехом, но в зависимости от того использовал ты var для объявления переменной внутри функции или сразу присвоил значение может зависит, где именно выделить память, в стеке или на куче. Это конечно байтоебство и душные кишочки, но довольно интересно, т.к. по сути можно писать не читаемый говнокод, который будет оптимальнее работать
Аноним 01/08/23 Втр 03:06:17 2789880 258
>>2789871
> но в зависимости от того использовал ты var для объявления переменной внутри функции или сразу присвоил значение может зависит, где именно выделить память, в стеке или на куче
примеры будут?
Аноним 01/08/23 Втр 03:14:53 2789881 259
Аноним 01/08/23 Втр 03:35:58 2789883 260
Нужно супер быстро выучить го. Собес на этой неделе. Знаю плюсы и питон. Что посоветуете? Тур прошёл, но литкоды всё равно туго решаю. Забываю элементарные вещи типа области видимости переменых
Аноним 01/08/23 Втр 03:44:34 2789884 261
>>2789883
Смотри моковые собесы по го, на русском языке контента часов на 10, гугли ответы на вопросы или просто старайся запомнить.
Олсо, как получил приглашение на собес без коммерческого опыта в го и петов?
Аноним 01/08/23 Втр 03:53:42 2789885 262
>>2789884
Спасибо. Не знал про такой контент.

Перевожусь в другую команду внутри компании. Тот же почти продукт только теперь компоненты на го есть. Нашу команду продали партнёрам, а я уходить из компании не хочу. Поэтому собес такой внезапный. Сам в го не хотел
Аноним 01/08/23 Втр 12:35:52 2790143 263
Стикер 0Кб, 512x512
512x512
>>2789883
>Знаю плюсы
>Забываю элементарные вещи типа области видимости переменых
Аноним 01/08/23 Втр 16:24:36 2790371 264
image.png 16Кб, 345x458
345x458
Задачка для интересующихся. Какой будет вывод?
Аноним 01/08/23 Втр 16:59:14 2790446 265
Аноним 01/08/23 Втр 17:05:02 2790460 266
Аноним 01/08/23 Втр 17:15:15 2790487 267
>>2790371
Ну тащемта первое по нулям если я правильно помню, что конст сайз арреи в гошке не поинтерами идут, пользуюсь хуй пойми да раз в год в лучшем случае, второе будет 012, но только если ты длину вручную модифнешь, аля slice[:3]
Аноним 01/08/23 Втр 17:36:38 2790514 268
Аноним 01/08/23 Втр 17:37:40 2790517 269
>>2790514
Неделю ток начал изучать, второй язык
Аноним 01/08/23 Втр 17:40:20 2790523 270
>>2790517
А первый какой был? Какой на нем грейд был?
Аноним 01/08/23 Втр 18:22:47 2790609 271
>>2790523
Питон, ботики всякие максимум писал
Аноним 01/08/23 Втр 18:49:10 2790651 272
>>2789881
1. Как сказали в комментах: автор очень косноязычный и некоторые вещи понять нереально. Отношения интерфейс-структура, он очень криво объяснил, на середине отвлекся и часть не договорил. На тему почему часть отношение интрефейс-интрефейс всегда идут в динамике, вообще что-то невнятное промычал что мы типа не всегда это можем знать. А вот вторая часть про аллокации, там намного четче и бодрее. Сразу видно что первую часть он пересказывает, то что читал у других, а второй сам занимался.
2. Это не данность, как он сам сказал все зависит от компилятора - по мере улучшения анализа поведение может меняться.
3. Он вообще не говорил про стиль декларирования := vs var, он говорил про ссылка vs не ссылка, и как влияет разная инициализация полей b.data = new(byte) vs box{data: new(byte)}. Просто он реально не умеет делать доклады и даже простые вещи не может объяснить нормально.

Вообще всю эту хуету можно и самому проверить и убедиться что := vs var влияет ссылка/не ссылка и как потом с этими данными обращаются. https://pastebin.com/jUzaqzRK
Но двощеры предпочтут пересказывать друг-другу одни и те же легенды
Аноним 01/08/23 Втр 18:58:19 2790659 273
>>2790651
> и как влияет разная инициализация полей b.data = new(byte) vs box{data: new(byte)}
Никак. Буквально одно и тоже.
Аноним 01/08/23 Втр 19:09:17 2790682 274
Аноним 01/08/23 Втр 20:12:34 2790763 275
>>2790659
>>2790682
Какой же ты хлебушек. Чел час распинался про эскейп анализ, когда он работает, а когда нет. Потом приходишь ты и специально возвращаешь ссылку на объект, чтобы компилятор на 100% был уверен, что ссылка утекает. Речь шла именно про случай когда объект используется только внутри метода.

https://godbolt.org/z/YEnxM344c
Вот тут как раз видно, что Dumber1_1 и Dumber1_2 вызывается runtime.newobject() аллокация в куче, а в Dumber2_1 - нет аллокация на стеке.
Аноним 01/08/23 Втр 20:48:16 2790796 276
Аноним 01/08/23 Втр 22:31:07 2790840 277
>>2790651
А есть ссылки на первоисточники? Не помню, чтобы в спеке разжевывалось отношение интерфейс-интерфейс
Аноним 01/08/23 Втр 22:46:24 2790855 278
1689800166260091.jpg 26Кб, 400x400
400x400
а вам же все залетные говорили что поинтеры зло а вы их не слушали
Аноним 01/08/23 Втр 23:14:45 2790867 279
>>2790855
Зло это НЕпоинтеры. Все должно быть только через поинтеры как в Жабе.
Аноним 01/08/23 Втр 23:32:33 2790875 280
>>2790840
Речь о том, как это технически реализовывается, а не поведение. Что будет если есть два интерфейса в разных пакетах, но с одними и теми же методами.
Аноним 01/08/23 Втр 23:54:47 2790903 281
>>2790875
Ок, где про это прочитать?
Аноним 02/08/23 Срд 04:35:03 2790969 282
>>2742815
У меня есть друг с IQ = 150, и даже ему тяжеловато писать на расте
Аноним 02/08/23 Срд 13:29:58 2791273 283
Аноним 02/08/23 Срд 13:32:16 2791279 284
>>2790867
В жаве есть примитивные типы. А сколько вальгалу завезут и не ссылочных типов станет ещё больше.
Аноним 02/08/23 Срд 14:14:50 2791344 285
чем го лучше TS/JS?
Аноним 02/08/23 Срд 15:25:40 2791498 286
Аноним 02/08/23 Срд 15:48:17 2791527 287
Анон, пишу простенький рест круд, собственно вопрос как правильно обрабатывать кейсы, когда GET или DELETE не находят запись в базе. Например select в гете ничего не нашел, в этом случае репозиторий должен вернуть nil указатель и сервер должен ответить 404?
А если апи не рест и всегда нужно возвращать какое-то значение?
Как во втором случае отличить zero value от не найденного значения?
Например есть структура с тремя int, как отличить 0,0,0 - значение найденное в базе, от такого же но ненайденнго с zerovalue?
Аноним 02/08/23 Срд 15:55:29 2791537 288
>>2791527
Не нашел - вернул код 404
ФСЕ

>Например есть структура с тремя int, как отличить 0,0,0 - значение найденное в базе, от такого же но ненайденнго с zerovalue
Ты буквально сам же предложил решение
Аноним 02/08/23 Срд 16:13:02 2791566 289
>>2791537
Т.е. в случае nil указатель маршалится в {} или somefield: null?
Чтобы клиент явно мог отличить nil от zero value
Аноним 02/08/23 Срд 16:15:38 2791571 290
>>2791566
В случае если ничего не найдено ты не обязан даже null возвращать. Просто возвращаешь респонс с кодом 404 и без body
Разные виды респонсов для разных кодов
Аноним 02/08/23 Срд 17:01:24 2791649 291
image.png 12Кб, 689x142
689x142
>>2791571
>>2791537
Спасибо за ответы и прости за духоту, но спрошу таки, как грамотно вернуть ошибку контроллеру/юзкейсу в случае если не найдена строчка
nil, nil в случае, если не найдена запись норм вариант?
Можно было бы и просто nil, err возвращать, но тогда в контроллере явная зависимость от пакета sql по сути не нужная
Аноним 02/08/23 Срд 18:45:49 2791760 292
>>2791649
чел, открой исходники. row.Err чекать даже не надо, оно при scan делается.
Аноним 02/08/23 Срд 18:49:00 2791762 293
>>2791760
плюс у тебя горутина утекает если ты выйдешь без scan
Аноним 02/08/23 Срд 20:12:15 2791841 294
>>2791760
>чел, открой исходники
Рили, программируем проект всем двачем, лол
Спасибо
Аноним 04/08/23 Птн 02:04:11 2793322 295
Аноним 04/08/23 Птн 05:33:39 2793386 296
>>2793322
Чувак из Нигерии и хочет релоцироваться в штаты.
Аноним 04/08/23 Птн 10:16:34 2793460 297
Аноним 04/08/23 Птн 15:36:32 2793919 298
Голанг - для свичеров из других языков?
Аноним 04/08/23 Птн 16:46:17 2794046 299
Аноним 04/08/23 Птн 16:51:37 2794056 300
>>2794046
Хорошо, что я свичер из других языков
Аноним 04/08/23 Птн 19:39:44 2794350 301
>>2793919
Кстати, насчёт свитчеров.
Я понимаю вопрос дебильный, но мож у кого-то просто опыт схожий был.
В общем ща я получаю 2к. Если свитчнусь в го, насколько можно просесть по зп, при условии что я не буду притворяться, что имею коммерческий опыт в го?
Просто прикидываю свои силы, можно ли уже сейчас пробоваться, или надо ещё поднатаскаться чтобы за своего пройти. Хотя с другой стороны я могу просто походить на собеседования и выяснить.
Аноним 04/08/23 Птн 23:23:49 2794545 302
>>2794350
Двачую вопрос, насколько реально свичнуться без опыта в Го?
Аноним 05/08/23 Суб 02:31:16 2794663 303
Аноним 05/08/23 Суб 04:22:54 2794693 304
Видимо никто итт этого не делал...
Аноним 05/08/23 Суб 04:30:44 2794694 305
16911818428690.mp4 443Кб, 544x960, 00:00:05
544x960
че по шекелям
Аноним 05/08/23 Суб 15:42:38 2795108 306
>>2794350
ну просядешь если пойдешь проходить собес на гошке и нихуя знать не будешь.
если будешь на своем языке собеситься то шансов больше))
Аноним 05/08/23 Суб 15:50:54 2795114 307
>>2795108
Не об этом вопрос.
Вопрос будут ли пытаться интенсивно пытаться прогнуть по зп ниже 2к если увидят отсутствие опыта в го, даже если на интервью норм справляешься.
Но можешь не отвечать, я уже понял что никто этого не знает.
Аноним 05/08/23 Суб 16:58:13 2795172 308
>>2794350
Зависит от твоего опыта. Меня брали без опыта в Го и на большую зарплату. Начиная с некого уровня предполагается, что ты способен выучить язык по ходу.
Аноним 05/08/23 Суб 18:12:25 2795273 309
image.png 53Кб, 1625x244
1625x244
Аноним 05/08/23 Суб 18:37:39 2795289 310
>>2795114
ну я просто один из кейсов описал, который может повлиять. у бэков есть выбор собеситься на гошке или пыхе/паре других языков. если выберешь проходить на гошке, но будешь хуево отвечать, ты потеряешь шанс показать что ты сенёр в пыхе и тебе дадут хуевую оценку. и возможно не найдется команд, которые тебя решат взять.
>я уже понял что никто этого не знает
очевидно, т.к. от компании к компании по-разному.

у нас пыхеров без опыта в гошке часто видно на собесах. сомневаюсь, что их намеренно просаживают - кандидаты тогда просто не будут офер принимать.
Аноним 05/08/23 Суб 19:17:30 2795311 311
>>2793919
для гошников, стажеров и свичеров-сеньоров. пробуйте на стажировку попасть, чтобы как этот >>2795273 хуй 2 года не мучаться на пыхе с тем же результатом.
Аноним 05/08/23 Суб 20:18:24 2795360 312
>>2795311
Ну если ситуация такая, то проще напиздеть
Аноним 05/08/23 Суб 20:22:19 2795361 313
Да и вообще уже похуй как-то.
На всё похуй.
На текущую работу, на следующую.
Лучше бы меня автобус переехал нахуй
Аноним 05/08/23 Суб 20:55:13 2795401 314
Аноним 05/08/23 Суб 21:45:57 2795437 315
>>2795311
А миддлов-свитчеров берут сейчас?
У меня джава, могу в асинхрон, в гошный тоже
Аноним 05/08/23 Суб 22:19:17 2795450 316
98441806cd93c5f[...].jpg 52Кб, 999x1000
999x1000
Аноним 06/08/23 Вск 16:19:41 2796104 317
hell-yeah-point.gif 151Кб, 220x302
220x302
Аноним 07/08/23 Пнд 20:22:53 2797484 318
>>2796104
И как оно? Проекты интересные, сильно дрочат за производительность из-за хайлоада?
Аноним 07/08/23 Пнд 21:31:44 2797528 319
image.png 12Кб, 372x263
372x263
Что. это. блять. за. пиздец.

Какому дауну эта хуйня вообще в голову пришла и сколько он перед этим стучался головой об стену?
Аноним 07/08/23 Пнд 21:42:16 2797537 320
>>2797528
Что конкретно тебе не нравится? Плохой редактор, неправильно подсвечивающий код?
Аноним 07/08/23 Пнд 21:47:51 2797540 321
>>2797528
otbs давно придумали
Аноним 07/08/23 Пнд 21:49:05 2797541 322
>>2797537
Почему в вашей обосранной помойке я (программист) не могу юзать индентацию?
Аноним 07/08/23 Пнд 21:56:40 2797545 323
>>2797540
Но шоб даже не компилировалось на уровне языка - это полный пиздец, нет? Почему какого то петуха волнуют мои базовые привычки?
Аноним 07/08/23 Пнд 22:20:56 2797555 324
>>2797541
Можешь юзать индентацию, просто открывающая { должна быть в той же строке, что main(). Вероятно, это как-то связано с избавлением от semicolon hell.
Аноним 07/08/23 Пнд 22:24:10 2797558 325
>>2797555
Нет, не могу, это кор гайдлайн вашего джава скрипта
Аноним 07/08/23 Пнд 22:28:50 2797564 326
>>2797558
Вроде нормально go run main.go отрабатывает. А на гайдлайн тебе похуй, сам же выше это написал.
Аноним 07/08/23 Пнд 22:44:10 2797599 327
>>2797564
Гайдлайн я имею ввиду на уровне языка. Как раз да, наверное из-за точек с запятой так делать и нельзя, ору нахуй челам не хватило извилин запилить адекватный парсер исходников и они забанили тупо кодстайл.

Че там у тебя компилируется - я хз, ты может провтыкал автоформатирование или еще что?
Аноним 07/08/23 Пнд 22:54:21 2797626 328
>>2797599
Ну, мне тоже нравится фигурная скобка с новой строки, потому что так естественным образом отделяется практически пустой строкой название функции от первой строки ее кода. В старых сях такой стиль был. Ну а в современных крестах уже в одну строку пишут. Может голэнгщики просто отдельное правило для парсера не хотели добавлять ради этого, тут стоит только начать, и у тебя уже через некоторое время будет дохуя отдельных правил.
Аноним 07/08/23 Пнд 23:41:56 2797687 329
>>2797555
this
В го команды отделяются семиколоном, просто он не явно подразумевается в определенных случаях при переводе строки, в спеке есть описание.
Аноним 07/08/23 Пнд 23:56:30 2797696 330
> https://pkg.go.dev/strings#Builder.WriteString
> WriteString appends the contents of s to b's buffer. It returns the length of s and a nil error.
>the length of s and a nil error.
>a nil error.
Какой же, блядь, замечательный язык! Как мне повезло на нём писать!

ДЕБИЛЫ ЕБУЧИЕ! ВЫ БЫ ХОТЬ ПОСМОТРЕЛИ НА СТРИНГ БИЛДЕРЫ В ДРУГИХ ЯЗЫКАХ! НИКОМУ НАХУЙ НЕ УПЕРСЯ НИ ДЛИННА, НИ ТЕМ БОЛЕЕ NIL ERROR. ПИДОРАСЫ ЕБУЧИЕ, ВЕРНИТЕ САМ Builder!

Извините, я пишу на Го, поэтому немного несдержан.
Аноним 08/08/23 Втр 00:02:07 2797701 331
>>2797696
Возвращать сам объект из метода [пере]изобрели в jQuery, то есть в жопаскрипте, чтобы можно было нахуячить цепочку object.method1().method2().method3(). Это решается и другими методами. Хотя я вот сам в крестах такое часто использую, чтобы превратить программирование на крестах в программирование на жопаскрипте, на что некоторые крестолухи ругаются, да и хуй с ними.
Аноним 08/08/23 Втр 02:12:58 2797777 332
Аноним 08/08/23 Втр 02:44:51 2797800 333
>>2797484
>Проекты интересные
иногда да, иногда простенькие. каждую правку можно самому пощупать и понять как оно на пользователей влияет. если есть крутые идеи, то ты как разработчик можешь их сам тоже предложить.
>сильно дрочат за производительность из-за хайлоада
от команды к команде, не у всех супер-нагруженные сервисы. на уровне кода обычно байтоебства нет. максимум попросят слайс преаллоцировать, последовательные сетевые походы переделать на параллельные, ну и индексы в бд конечно же.
по большой части надо чтобы архитектура скалировалась и твоя хуйня не стала ботлнеком/не валила флоу пользователя - грейсфул деградировала, асинхронно выполнялась, когда возможно, и т.п. Нагрузку считать, уведомлять смежные команды о планируемом росте рпм, проводить НТ - это приходится.
Аноним 08/08/23 Втр 13:28:44 2798186 334
>>2797701
>Возвращать сам объект из метода [пере]изобрели в jQuery, то есть в жопаскрипте, чтобы можно было нахуячить цепочку
Чееееел. Конкретно для стринг билдера этот шаблон с возвратом this использовался и джавой и шарпом, задолго до жс.

>>2797777
Какой же охуенный язык Го! Делаем у метода ебанутую сигнатуру, чтобы она соответствовала какому-то интерфейсу в другом пакете. При этом в коде вообще никаких упоминаний об этом интерфейсе. Ну заебись же!
Аноним 08/08/23 Втр 15:13:40 2798323 335
50 просмотров за 3 дня, 10 откликов, 2 приглашения
Отчаиваться рано?
Мимо-свитчер
Аноним 08/08/23 Втр 15:40:28 2798354 336
>>2798323
Не вниманиеблядствуй, пуссичека.
мимо вкатун без опыта 0 собесов
Аноним 08/08/23 Втр 18:33:08 2798594 337
>>2798186
зачем вам всю вселенную упоминать для каждого типа?
Аноним 08/08/23 Втр 22:51:53 2798950 338
image.png 229Кб, 509x303
509x303
>>2798594
Если разработчик хочет чтобы тип реализовывал какой-то интерфейс - пусть явно это напишет. А не ебется с
var _ Interface = &Struct{}
и пользователям мозги не ебет а прокатит Foo в качестве Bar?

Нахуй надо тащить duck typing в статический язык - решительно непонятно. Это порождает кучу сложностей в рантайме, типа >>2789881 часть про то как тип мапиться на интерфейс в рантайме, это создает проблемы с пониманием API нахуй надо a nil error возвращать?. Оставте duck typing динамодристне, а в статическом языке делайте статические реализации интерфейсов.
Аноним 09/08/23 Срд 13:13:57 2799466 339
Как скомпилировать go-программму без подключённого интернета?

Будучи на даче, обнаружилось, что go build без интернета совсем не работает (выдаёт ошибки подключения к сети). То есть ни одну программу невозможно собрать оффлайн. И это несмотря на то, что все зависимости уже установлены и есть в кэше.

ЗЫ У меня последняя версия гошного компилятора.
Аноним 09/08/23 Срд 13:53:41 2799489 340
>>2799466
Ты правда думал, что гугл позволит тебе это сделать без отправки на их сервера телеметрии?
Аноним 09/08/23 Срд 14:34:40 2799524 341
>>2799466
Не воспроизводиться, у меня билд проходит и без интернета. С какими флагами запускаешь и что выводит? Пробовал go mod vendor?
Аноним 09/08/23 Срд 16:36:52 2799680 342
Завезли функций, гуляем
Go 1.21 adds three new built-ins to the language.

The new functions min and max compute the smallest (or largest, for max) value of a fixed number of given arguments. See the language spec for details.
The new function clear deletes all elements from a map or zeroes all elements of a slice. See the language spec for details.
Аноним 09/08/23 Срд 16:50:56 2799711 343
>>2799466
>И это несмотря на то, что все зависимости уже установлены и есть в кэше.
ты уверен, что они все правильных коммитов, которые у тебя в go.sum?
Аноним 09/08/23 Срд 23:17:40 2800316 344
>>2799680
>The new functions min and max compute the smallest (or largest, for max) value of a fixed number of given arguments. See the language spec for details.
Был бы нормальный язык math.Max() был бы перегружен для всех числовых типов. Но это не говновей. Говей это делать встроенные функции, когда проблема уж совсем заебывает.
Интересно что им мешало переписать math.Max() на дженериках? Пока не научились ими пользоваться?
Аноним 10/08/23 Чтв 04:31:08 2800415 345
>>2800316
>на дженериках
Отправляешь туда разные типы и comparable интерфейса, твои действия? А вот с built-in такое можно
Аноним 10/08/23 Чтв 10:09:10 2800510 346
Аноним 10/08/23 Чтв 10:12:50 2800515 347
>>2799524
>>2799711
Как воспроизвести:

1) Вначале с включённым интернетом компилируем вот такой hello.go https://pastebin.com/96uYkp4P Он соберётся, при этом все зависимости скачаются автоматически.
2) Теперь отрубаем интернет, создаём новый каталог, в который помещаем только hello.go, и пробуем его собрать. Невозможно, так как лезет в сеть и не может приконнектиться:
exit status 128:
fatal: unable to access 'https://github.com/mattn/go-runewidth/': Could not resolve host: github.com
fatal: unable to access 'https://github.com/nsf/termbox-go/': Could not resolve host: github.com


А go mod vendor выдаёт:

github.com/mattn/go-runewidth: no required module provides package github.com/mattn/go-runewidth; to add it:
go get github.com/mattn/go-runewidth
github.com/nsf/termbox-go: no required module provides package github.com/nsf/termbox-go; to add it:
go get github.com/nsf/termbox-go


Что за дебилизм? Смотрите первый пункт, зависимости-то уже скачаны и в кэше!
А без сети go get уже и не сделать!
Аноним 10/08/23 Чтв 11:32:27 2800559 348
>>2800415
>Отправляешь туда разные типы и comparable интерфейса, твои действия?
Ты вообще программировать то умеешь? https://go.dev/play/p/z0DI3dyeWJt если бы был встроенный тип ordered было бы компактней

И не comparable, а ordered. comparable это только равенство, но не порядок.
Аноним 10/08/23 Чтв 13:15:35 2800645 349
>>2800515
>в который помещаем только hello.go, и пробуем его собрать
ну скопируй go.mod и go.sum и положи рядом и всё
Аноним 10/08/23 Чтв 14:14:39 2800728 350
>>2800645
Гениально! А зачем вообще было создавать отдельный каталог и помещать туда hello.go, если можно было остаться в том же? Даже перекомпилировать не надо, бинарник-то уже собран!
Это был пример для гарантированного воспроизведения, дурында!

Для тупых: в реальности вместо hello.go может быть другая прога, хотя и включающая те же зависимости (+ другие тоже уже скачанные), но для которой нет готовых go.mod|sum.
Аноним 10/08/23 Чтв 17:14:47 2801052 351
>>2800728
чел, там всего лишь надо в go.mod указать версии пакетов и оно всё из кеша подтянется. можешь хоть из нескольких разных go.mod накопипастить реквайры. почему тебе go mod tidy не заполняет go.mod последними локальными версиями? ну типа да, могли бы заполнять, но вообще юзкейс редкий и всем похуй. можешь на гитхабе предложить.
Аноним 10/08/23 Чтв 17:53:34 2801108 352
>>2801052
Не соглашусь. Есть множество случаев, когда может понадобиться скомпилировать программу без интернета.

Кстати, go нужно банить на хостингах за такое насилование сети на каждый чих вместо кэша. Ладно, сейчас на go мало кто пишет и компилит, а если он вдруг станет по-настоящему популярным? Это же ддос-атака на ресурсы типа гитхаба и бессмысленный жор кучи трафика.
Аноним 10/08/23 Чтв 18:10:01 2801145 353
>>2801108
>Есть множество случаев, когда может понадобиться скомпилировать программу без интернета
И у тебя есть все зависимости для этого в локальном кеше И эту программу тебе поставили без go.mod И ничего в ней не завендорили
Аноним 10/08/23 Чтв 18:57:16 2801208 354
>>2801108
зеркала есть же, в крупняках по крайней мере
Barney 10/08/23 Чтв 22:41:13 2801521 355
Сап, вкатываюсь в го в микросервисы и в тулинг.

Не понимаю прикол таких вещей как go kit и go micro. Пытался выкурить, но так и не понял, в чем прикол. Антон, расскажи, юзаешь ли ты это и для чего?

Еще через жопу у меня получается трейсить запросы, и особенно логировать trace ID и span id. Антон, расскажи, юзаете ли вы трейсинг и так ли он необходим
Аноним 10/08/23 Чтв 22:48:52 2801526 356
>>2801521
Ты видимо с кубером ещё не работал, раз такие вопросы задаёшь. В гошке вся фишка в том, что ты не только бэк пишешь, но ещё и девопсом на 0.75 ставки будешь работать. Морально готовься.
Аноним 11/08/23 Птн 01:45:17 2801663 357
>>2801521
не юзаю. ну go-kit где-то там глубоко в зависимостях видел. тулинг-логирование-трейсы-метрики-хуемое у нас отдельная команда делает - частично самописные вещи, частично обертки под уже готовые (потом там что-то допиливает/меняет реализацию под капотом и т.п.). мы просто юзаем то что они предоставляют.
трейсинг юзаю, т.к. у нас дохуя сервисов и чтобы понять что вообще происходит при вызове какой-то ручки это быстрее, чем лазить по коду нескольких реп.
Аноним 11/08/23 Птн 20:26:55 2802673 358
image.png 2Кб, 36x198
36x198
>>2797528
Говноед будет кукарекать о стиле, фу блядь

В автоформатере го излишни лишь еубищные дедовские выравнивания нахуй не нужные
Аноним 11/08/23 Птн 21:34:34 2802808 359
>>2802673
Че ты расквакалась пидорашка зумерская? Нахуй тебе это скобка после выражения? Байты экономишь?
Такой код стайл самый адекватный, сразу +100 к читаемости потому что всё четко видно по блокам и что к чему относится. Жаль что зумерки этого не понимают, ведь они ничего кроме кода своих лаб не видели даже
Аноним 12/08/23 Суб 10:13:54 2803281 360
>>2797540
Но форсить его на уровне компилятора, догадалась только в го. Если уж так руки чешутся, то сделали бы в релиз режиме. А то дебажишь код, закомментировал строчку, и переменная не используется иди нахуй.
Аноним 12/08/23 Суб 10:19:21 2803286 361
>>2802808
Майкрософтомакака, ты? У тебя мозгов не хватает распознать блок, который начинается не скобкой, а ключевым словом? Я хочу видеть максимальное количество строк кода за раз чтобы не скролить постоянно его туда-сюда. Люблю смотреть как вы пролистываете ваш код с сеттерами и геттерами из одной строки, который превращаются в ёбаную гармошку на весь экран из-за скобок.
Другой анон.
Аноним 12/08/23 Суб 11:34:56 2803330 362
>>2803286
Ты ведь в курсе что в нормальных языках скобку на одно выражение можно и не ставить? Ах да, ты же голенговая одебилевшая обезьяна
Аноним 12/08/23 Суб 14:05:02 2803469 363
>>2803330
НАЗОВИ МНЕ 3 ЯЗЫЧКА СО СКОБКАМИ КОТОРЫЕ ЛУЧШЕ ЧЕМ ГОЙЛАНГ
Аноним 12/08/23 Суб 14:45:41 2803516 364
Внезапно понял, кто все это время были хейтеры отступов петухона - мс рабы, не могущие забить линию своей уебищной скобкой
Аноним 12/08/23 Суб 15:43:02 2803619 365
>>2803469
А почему 3, магический ты человек? Бери выше, любая параша лучше вашего говна где программисту даже кодстайл выбрать нельзя. Странно еще что вам на нем писать разрешают
Аноним 12/08/23 Суб 15:45:22 2803622 366
>>2803619
НАЗОВИ СВОЮ ЛЮБИМУЮ ПАРАШУ КОТОРАЯ ЛУЧШЕ ГОЙЛАНГА
Аноним 12/08/23 Суб 15:50:19 2803625 367
>>2803622
Kotlin

Дальнейшие вапросики имеются карлито?
Аноним 12/08/23 Суб 16:01:13 2803644 368
>>2803625
А ВОТ ПРЕДСТАВЬ ЧТО ГОЙТЛИНА НЕТ. ЧТО БЫЛО Б ТВОИМ ЛЮБИМЫМ?
Аноним 12/08/23 Суб 16:03:08 2803646 369
>>2803644
Челик ты очень слабый в троллинге, не пытайся даже, ну не получается у тебя
Аноним 12/08/23 Суб 16:03:34 2803647 370
Аноним 12/08/23 Суб 16:04:52 2803651 371
Аноним 12/08/23 Суб 16:05:55 2803652 372
Аноним 12/08/23 Суб 16:15:22 2803663 373
Аноним 12/08/23 Суб 17:40:38 2803782 374
>>2803619
>программисту даже кодстайл выбрать нельзя
программисту вообще нахуй лишнего выбора нельзя давать. пусть пишет то, что нужно, а не всякой левой хуйней занимается.
Аноним 12/08/23 Суб 17:50:58 2803794 375
>>2803782
База. Как вообще код этих пидарасов ревьюить, если у них ещё и кодстайл отличаться будет. Хотите творчества - съебывайте из сферы нахуй.
Аноним 13/08/23 Вск 03:43:54 2804405 376
>>2770750
Может кто-то пояснить за эту хуйню? Я так понял, что прикол в том, что просто хочется делать встроенные в язык итераторы, а если делать их тупо на каналах без поддержки yield'ов то это будет неэффективно
Аноним 13/08/23 Вск 15:11:41 2804726 377
>>2803794
>База. Как вообще код этих пидарасов ревьюить, если у них ещё и кодстайл отличаться будет.
Как во всех нормальных языках делают. Компания выбирает себе кодстайл, пишеи гайдлайны, в CI/CD вставляет запуск верифаера кодстайла. Если компании похй - то все пишут как хотят. Уж точно это не Пайково собачье дело.
Аноним 13/08/23 Вск 16:15:38 2804793 378
>>2804726
так это все равно делается. только в кодстайле нет скобочек
Аноним 13/08/23 Вск 20:59:04 2805216 379
>>2804793
В каком кодстайле нет скобочек? Что ты вообще несёшь?
Аноним 13/08/23 Вск 21:39:18 2805248 380
>>2805216
в гошных кодстайлах про скобочки не пишут, чурек
Аноним 13/08/23 Вск 22:44:06 2805311 381
Аноним 13/08/23 Вск 23:37:03 2805350 382
Аноним 14/08/23 Пнд 02:40:22 2805406 383
>>2805311
Чтобы модно молодежно, без привязки к энтерпрайзу и финтеху
Аноним 14/08/23 Пнд 03:23:56 2805411 384
>>2805350
ну если ты под словом кодстайл понимаешь синтаксис то вопросов нет, намыль веревку и скворечник свой повесь
Аноним 14/08/23 Пнд 09:55:45 2805495 385
>>2802808
Шарпомакака, только у вас так по ебнутому переносят скобки, потому что индусам в ms построчно платят. Во всех других языках code style примерно как в гошке и линтеры работают примерно также
Аноним 14/08/23 Пнд 10:07:05 2805497 386
>>2805495
Я не шарпист, ты обосрался олигофреновая обезьяна
Аноним 14/08/23 Пнд 23:44:06 2806676 387
image.png 203Кб, 1805x676
1805x676
>>2805411
>ну если ты под словом кодстайл понимаешь синтаксис то вопросов нет, намыль веревку и скворечник свой повесь
Дебил, весь мир по кодстайлом понимает в том числе и расстановку скобок. Иди лучше в мак сортиры мыть.
Аноним 14/08/23 Пнд 23:51:47 2806678 388
>>2797800
Авито-анон, поясни, плс, за направления в авито для гошников?, какие перспективные, какие интересные. Видел вакансии в области безопасности в том числе, там интересные проекты? Или самый движ в продуктовой разработке?
Аноним 15/08/23 Втр 01:15:53 2806716 389
>>2806676
челик, кодстайл это всё то, что ты можешь менять. спек языка это не кодстайл. синтаксис языка это не кодстайл. реализация компилятора это не кодстайл.
Аноним 15/08/23 Втр 08:41:20 2806766 390
Пытаюсь собрать бинариник под андроид телефон.
Установил GOOS=android и GOARCH=arm
Пыфтаюсь собрать и получаю
# runtime/cgo
gcc.exe: error: unrecognized command-line option '-marm'; did you mean '-mabm'?

В GOGCCFLAGS при этом вижу этот -marm но GOGCCFLAGS не меняется по документации. Так как изменить параметр для компилятора? Это делается на стороне Go, на стороне gcc, надо менять какой-то другой параметр?
Аноним 15/08/23 Втр 09:07:10 2806773 391
изображение.png 401Кб, 800x986
800x986
СОЗДАЕШЬ ВСЕ ПЕРЕМЕННЫЕ НА СТЕКЕ
@
ВЫКЛЮЧАЕШЬ СБОРЩИК МУСОРА
Аноним 15/08/23 Втр 13:01:47 2806933 392
>>2806766
Посмотри в сторону gomobile
Аноним 15/08/23 Втр 13:22:25 2806965 393
Где можно почитать про рантайм го? Желательно по последним версиям и чтобы в одной статье все аспекты были рассмотрены хотя бы поверхностно планировщик, gc, структура памяти, etc.
Аноним 15/08/23 Втр 14:57:53 2807094 394
>>2806716
>челик, кодстайл это всё то, что ты можешь менять. спек языка это не кодстайл. синтаксис языка это не кодстайл. реализация компилятора это не кодстайл.
Мне ебучий компилятор не дает спокойно строчку закоментировать, отказывается компилировать потому что переменная/пакет не используется. Хорошо хоть переменные пока дают называть как хочешь. Но чувствую это поправят в новом релизе.
Аноним 15/08/23 Втр 15:10:05 2807102 395
image.png 266Кб, 604x453
604x453
>>2806773

@
ВОЗВРАЩАЕШЬ ИЗ ФУНКЦИИ УКАЗАТЕЛЬ НА ДАННЫЕ НА СТЕКЕ
@
СЕГФОЛТ, ТАК СЕГФОЛТ
Аноним 15/08/23 Втр 18:27:23 2807426 396
>>2806678
я в продукте, насчет безопасников не очень много слышно - обычно то, что они sast/dastы пилят, ну и с аудитами помогают.
максимум движа - в продукте, там всякие аб-тесты, новые запуски и т.п. но я думаю в командах со внутренними продуктами тоже полно интересных задач. энивей можно трансфернуться в другую команду, если поймешь, что тебе не очень и там будет вакуха.
Аноним 15/08/23 Втр 18:53:12 2807472 397
>>2807102
Там же не будет сегфолта, просто со временем операционная система прибъет процесс из-за ООМ.
Аноним 15/08/23 Втр 23:30:56 2807628 398
>>2807472
После возврата из функции стекфрейм считается неиспользуемым, дальше возможны варианты. В Го стек горутин выделяется на куче, после завершения горутины память могут вернуть ОС, тогда будет сегфолт в текущей реализации, Го никогда не возвращает память ОС. В стек может записать новый вызов функции, сегфолта не будет, но вместо данны будет мусор наиболее вероятный сценарий.
Аноним 16/08/23 Срд 02:43:12 2807667 399
>>2806965
Отличный вопрос, рекомендую почитать нигде, ещё можно нигде и в конце обычно всем советуют нигде.
Дельных статей почти нет, на русском просто нет, читай исходники, слушай подкасты гошников, они иногда этой темы касаются. Смотри видосы с конференций по теме, но там зачастую джуниор уровень.
Аноним 16/08/23 Срд 12:22:33 2807863 400
>>2781520
Тащемта про наследование он прав. На предыдущей галере большую часть задач наследования решали композированием функционала.
Аноним 16/08/23 Срд 12:22:57 2807865 401
>>2807863
>>2781520
> На предыдущей галере большую часть задач наследования решали композированием функционала.
На плюсах
Аноним 16/08/23 Срд 14:40:16 2808054 402
>>2797528
Golang - буквально язык программирования Google. Он разрабатывался для решения внутренних задач, и, очевидно, был написан под местный кодстайл.
Аноним 16/08/23 Срд 14:47:45 2808067 403
>>2808054
Да норм язык, многопотчку заебись сделоли, каналы дадены - можно любое канкаренси апи реализовать, еба
Аноним 16/08/23 Срд 14:48:16 2808069 404
Аноним 16/08/23 Срд 16:56:46 2808277 405
>>2808054
>Golang - буквально язык программирования Google. Он разрабатывался для решения внутренних задач, и, очевидно, был написан под местный кодстайл.
В Гугле половина вопросов по кодстайлу решается presubmit check, но другую засунули аж в компилятор. Почему нельзя было всё так сделать?
Аноним 17/08/23 Чтв 01:40:02 2808801 406
>>2808054
Это очень популярный миф, а точнее пиздеж. Вклад гугла в го там на уровне "мы платили деньги чувакам типа Раса Кокса, которые фулл тайм разрабатывают ЯПы". Целей сделать "язык гугла" у них не было и нет. Хуйня про "нам нужен был язык для дебилов" и прочее тоже очень сильно вырвана из контекста и слов одного конкретного человека.
Более того, ты можешь пойти к любому сотруднику гугла и спросить, как там у них дела и они тебе ответят, что с го у них пиздец и дикий говнокод. И да, половина гугла написана на джаве, половина на плюсах - а оставшиеся проценты делят все прочие языки, включая го.
Даже убер, насколько бы он мне не нравился - намного более "гошная" контора, которая написала тонну софта и которая действительно в промышленных масштабах разрабатывает и поддерживает сервисы на го. хотя их код конечно ну такое, там явно джава головного мозга, не советую
Аноним 17/08/23 Чтв 13:40:57 2809286 407
>>2808801
а мне понравился их unber fx. Елси его внедририть на весь отдел, то получается очень простой и шаблонный код.
Аноним 17/08/23 Чтв 15:37:59 2809489 408
>>2808801
>Вклад гугла в го там на уровне "мы платили деньги чувакам типа Раса Кокса, которые фулл тайм разрабатывают ЯПы".
Кто девушку ужинает, тот её и танцует. Да Го не внутренний язык Гугла, но он очень сильно заточен под нужды SRE.

>ты можешь пойти к любому сотруднику гугла и спросить, как там у них дела и они тебе ответят, что с го у них пиздец и дикий говнокод.
Код сам по себе нормально написан, проблема в том что постоянно меняются приоритеты. Система писалась для одной задачи, пришло начальство и сказало, что теперь ваша система будет ещё и задачу Б делать, срок вам квартал. Понятно, что архитектура получается не очень. Но сам код нормальный насколько возможно для го.
Аноним 17/08/23 Чтв 16:16:50 2809541 409
Зип файл, православные. Расскажите, как дела у вас на работах? Я три года андроид и с недавних пор котлин мультиплатформа разраб. Заебался что постоянно всё новое, постоянно надо чёто новое дрочить, что в каждой конторе своя выдуманная архитектура потому что архитектура, рекомендуемая гуглом, говно, и постоянно обновляется. Три многопоточных "фреймворка", два UI-фреймоврка ничем не похожих друг на друга, два языка, jvm и native, дохуя делов короче, больше не хочу этим говном заниматься. В каждой вакансии свой уникальный стек, а я не очень умный чтобы меня на любую из них брали без специфичных знаний. Расскажите, насколько у вас всё устаканилось, чё вообще на работе делаете? Может кто из андроида/мобильного перекатился, расскажите про свой опыт. Стоит ли перекатываться или лучше не выёбываться и торчать в android/kmp?
Аноним 17/08/23 Чтв 16:32:19 2809570 410
>>2809541
Добавлю, что работаю в говноконторе без тестировщиков, аналитиков и прочих. Делаю приложения для железа по BLE, USB, MIDI. Всё нетипичное, может поэтому я здесь так страдаю, не знаю.
Аноним 17/08/23 Чтв 17:24:16 2809639 411
>>2809541
100% инфу не дам, т.к. сам пока пытаюсь свичнуться, из опыта собесов и прошлого опыта в энтерпрайзе могу сопоставить, в целом кажется +- один и тот же стек, во многих солидных конторах над конкретными технологиями свои обертки, если будешь писать микросервисы, а скорее всего так и будет, то там все же по шаблонам из шапки, на уровне самого приложения - чистая или гексогональная архитектура, ну UI не будет скорее всего, только если ты не фулл стек. SQL надо надрочить и понимать как БД работают. В целом шарить за бэк полезно, подходы не так чтобы меняются часто, типа пакетной обработки, брокеров сообщений, протоколов https, grpc.
Аноним 17/08/23 Чтв 17:57:08 2809678 412
>>2809639
Спасибо за ответ братан!
Аноним 17/08/23 Чтв 23:18:24 2810033 413
>>2809489
> Но сам код нормальный насколько возможно для го.
Да нихуя он там у них не нормальный, идиоматичностью и не пахнет. Нормально писать на го, нужно идти не в гугл, суровая правда жизни

>>2809286
Это в лучшем случае лучшее из худшего. Куча магии, неочевидного поведения и хаков, чтобы эмулировать нормальные джавовые контейнеры. Для го такой подход чужд.
Но даже если и забыть про всё это - fx тупо плохо написан, я разбирался в их коде в своё время. Это крайне переусложненная надстройка над dig, с абстрактным графом абстрактных опций поверх абстрактного графа абстрактных опций. Авторов явно долго и методично били по голове самоучителем по Java 8. А потом ещё немного повозили лицом по какому-нибудь ООПшному сборнику типа паттернов GOF.
Аноним 17/08/23 Чтв 23:34:15 2810052 414
>>2810033
>Да нихуя он там у них не нормальный, идиоматичностью и не пахнет. Нормально писать на го, нужно идти не в гугл, суровая правда жизни
Ты там работаешь, чтобы так категорично утверждать? Может приведешь пару примеров не идеоматичного кода и гайдлайнов гугла?
Аноним 18/08/23 Птн 12:43:26 2810434 415
image.png 48Кб, 535x583
535x583
image.png 41Кб, 719x311
719x311
image.png 6Кб, 1870x27
1870x27
image.png 29Кб, 635x279
635x279
Почему когда я вывожу в консоль, buffer.String() выдает последнюю строку и все круто (пик1). Но когда я делаю похожую штуку и вывожу её в html, я получаю говно, весь вывод идет в одну строку (пик3). Я пытался написать \n в буфер или writer, не робит. Как это фиксить? пик4 функция хендлера
Аноним 18/08/23 Птн 13:10:00 2810455 416
>>2810434
надо было учить язык программирования html.
думаю ты увидишь все свои переносы, если нажмешь правкой кнопкой и сделаешь View Source
Аноним 18/08/23 Птн 14:46:52 2810568 417
Можете кто-нибудь скинуть ссылку на какой-нибудь гит с небольшой программой на go, но выполненной по всем правилам заебатого кода, про которую сразу можно сказать что чувак шарит?
Аноним 18/08/23 Птн 15:07:37 2810600 418
Аноним 18/08/23 Птн 19:49:50 2811204 419
Аноним 18/08/23 Птн 21:46:59 2811386 420
>>2740805 (OP)

Бля, я для вката в это ваше программирование выбрал c++. А мне приятель говорил: "фу, старьё, выбирай модное - молодежное". Сейчас пытаюсь изучить GO, чтоб какую-то первую работу найти. Это просто пизда:

1) учебники либо для опытных программистов, либо для школьников. Этого вашего ебучего Донована можно с середины в любом направлении читать, пытался учиться по нему - упражнения в каждой главе как будто ты уже всю книгу осилил, периодически на середине какой-то темы бросается выражениями, которые не программист не поймет. С трудом понимаю что пишет, проводя параллели с c++, плюнул изучаю язык по хуйне для школьников. Базовой инфы никакой, пишет для тех, кто уже имеет опыт в пару лет как минимум.
2) ебусь второй день с ебучими пакетами, не могу заставить GO пользоваться моими пакетами из нужных мне папок. Какого хуя, спрашивается, вообще нужен был этот ебучий гемморой с GOPATH, примеры из учебников не работают, примеры из стаковерфлоу не работают, добрался до Go Modules, про который какая-то добрая душа где-то написала. Предчувствую ещё пару вёдер этого дерьма.
3) Онли пакеты с функциями и готовыми объектами. Я понимаю что макак типа меня надо снабжать готовыми решениями, чтобы сложнее было хуйни наворотить. Но в крестах я понимал что стоит за каждым объектом, за каждой функцией или хотя б в общем виде представлял. А тут набор кроликов из чёрных ящиков, вот тебе возвращаемые значения, а остальное тебя ебать не должно. Логика тут есть, только чувствуешь себя на тонком льду - не знаешь когда и где провалишься. А когда это таки случается - не понимаешь с чем это связано, как это исправлять и где вообще концы искать.

Короче я не понимаю что простого в GO, в крестах много информации, но всё гораздо проще и прозрачней. Баттхёрт излил - пойду дальше жрать кактус.
Аноним 18/08/23 Птн 21:58:29 2811395 421
>>2811386
а поделишься ссылкой на Донавана или где купить pdf?
>добрался до Go Modules
ну там проще, пакетики загрузятся в нужную папку
>Онли пакеты с функциями и готовыми объектами.
юзай чатгопоту, он неплохо разжевывает моменты и экономит время на гугле, но чекай на всякий потом его ответы
Аноним 18/08/23 Птн 22:04:15 2811402 422
>>2811386
> учебники либо для опытных программистов, либо для школьников
Учебники всегда непонятные, пока ты не начнёшь проекты делать сам.
>А тут набор кроликов из чёрных ящиков, вот тебе возвращаемые значения, а остальное тебя ебать не должно.
Ну ващет в го можно хоть в исходники самого компилятора залезть чтобы что-то посмотреть, тем более в исходники пакетов (если ты скачал эти исходники). Это ж не 1с.
Аноним 18/08/23 Птн 22:14:38 2811411 423
>>2811395

Донован есть на рутрекере, я себе еще книжку купил 20-го года издания, правда судя по всему это все то же издание, отличий я, по крайней мере, не заметил.
Аноним 19/08/23 Суб 08:24:41 2811581 424
>>2811395

Держи, братан. Поверхностный просмотр не показал мне, что эта книга чем-то отличается от русского издания 2020 года, которая у меня в бумаге лежит.

https://dropmefiles.com/pQucF

>>2811386

В итоге ещё несколько часов баттхёрта, гугления, кучи созданных новых проектов и директорий - каким-то образом начало работать. Но знаете, что:
1) я не понимаю почему оно начало работать
2) я не понимаю почему оно не работало
Есть подозрение, что изменение произошло после того как я изменил с GO111MODULE = auto на GO111MODULE = on. При этом все старые директории, в которых я инициировал go.mod продолжают не работать. Короче, говна поел, потратил время в пустую, даже не разобрался.
Аноним 19/08/23 Суб 16:56:22 2811996 425
>>2811581
>Есть подозрение, что изменение произошло после того как я изменил с GO111MODULE = auto на GO111MODULE = on
ну это проверяется за 10 секунд. у тебя какая версия?
>Go 1.17 was released on August 16, 2021. As for 1.16, GO111MODULE=on is the default behavior, and GO111MODULE=auto is equivalent to GO111MODULE=on. If you still want to use the GOPATH way, you will have to force Go not to use the Go Modules feature using GO111MODULE=off
Аноним 19/08/23 Суб 17:35:45 2812029 426
>>2811996

Я обновлял один раз: была 1.20, вроде, стала 1.21
Аноним 19/08/23 Суб 21:23:00 2812431 427
>>2811386
Это какой-то троллинг.
Кресты невозможно выучить и практически невозможно писать на них правильно, спроси у любого достаточно опытного программиста, не являющегося при этом фанатиком.
Кресты охренительно сложны даже на уровне стандартов, а ещё там на каждом шагу UB (гугли UBook, охуеешь оттого, насколько небезопасно в крестах делать что угодно) и ансейф на уровне стандартных библиотек.
Не от хорошей жизни появился раст, не от хорошей жизни появился го.
Аноним 19/08/23 Суб 21:48:26 2812443 428
>>2812431

Я не буду спорить, потому что я сраный вкатун, а не программист. Возможно это заслуга хорошего учебника, я осваивал кресты по книге Стивена Пратта "Язык программирования C++". Каждый рассмотренный вопрос в этой книге мне понятен. Больше всего сложностей у меня было с указателями, а точнее когда начинались указатели на указатели на указатели, но даже это далось. Также мне лично относительно тяжело было понять обобщенное программирование из библиотеки STL после ООП. Абстрактные классы, виртуальные функции, шаблоны всех мастей, спецификации и другие вещи с иерархиями следуют определённым строгим внутренним правилам, поэтому всегда можно раскрутить весь клубок и прикинуть хуй к носу. Этим мне С++ и понравился - он пронизан определёнными глобальными принципами, которые дают тебе правильное направление в мышлении, либо просто автор учебника настолько хороший преподаватель. С тем что C++ более чувствителен к качеству программиста - я полностью согласен, так как ограничений он накладывает очень немного.

Поэтому мне сейчас Go кажется тяжёлым, так как на первый взгляд он выглядит просто как бессистемный набор каких-то решений.
Аноним 19/08/23 Суб 21:50:52 2812445 429
>>2812431

Добавлю, что я осваивал только ванильный C++, весь цимес, на изучение которого жизни не хватит, находится в библиотеках.
Аноним 19/08/23 Суб 23:28:57 2812479 430
>>2811386
>>2812443
Поздравляю, ты только что разницу между коммерческим языком и пустым дрочем. Никто не читает код библиотек, и уж тем более крестовых кроме самих писателей этих библиотек и задротов-велосипедистов. Занятие абсолютно бессмысленное, во-первых, во-вторых, довольно сложное, потому что код плюсов, особенно stl и boost подобных библиотек - очень нетривиальны, требует не только разбирания логики, но и почему именно так написано а не иначе. В плюсах люди не реализуют свои идеи, они блять сидят и дрочат: а что блять там где то и как будет происходить если я напишу свою мысль вот так или эдак? Это абсолютно идиотское занятие. Но зато ты понимаешь как все происходит вон там, и после, правда что уже после после происходит как то не оч(
Аноним 20/08/23 Вск 00:44:15 2812516 431
>>2812443
Я отчасти с тобой согласен, го действительно несколько бессистемен. В смысле, многие вопросы в нём или отданы на решение самому программисту (то есть, решаются разными либами), или язык содержит для них пару волшебных хаков.
Но при этом го сильно проще плюсов на концептуальном уровне, этих концепций на порядки меньше. По сути в го есть структуры, интерфейсы и функции, всё остальное - легкие надстроечки. В плюсах и прочих языках этого сильно больше, а ведь потом ещё и начинаются хаки, хаки хаков, хаки хаков хаков и тп. В результате к примеру в плюсах это приводит к тому, что программирование на языке превращается в метапрограммирование на темплейтах, где без поллитра не разберешся. Про арифметику указателей и триллион тонкостей с ними я вообще молчу.
При этом конкретно плюсы страшны тем, что во первых, там до черта вариантов сделать одно и то же немного по разному (какая-нибудь разница между string_view const char* и тп), а во вторых каждый из этих вариантов содержит подводные камни и ловушки, которые ты в своём игрушечном коде и книжках для начинающих не встретишь, а на реальной работе начнешь быстро седеть и охуевать от того, что там из этих подводных камней можно кремль выстроить.

Очень тривиальный(но рабочий) пример:

bool Foo(int a) {
return a < a+1;
}

в плюсах в реальной жизни будет возвращать тебе неожиданный результат в зависимости от компилятора и его настроек.
В условной дебажной сборке результат будет вычисляться примерно так, как ты ожидаешь: на почти всех числах функция вернет true, а на 2147483647 она вернет тебе false, так как a+1 переполнится. И это переполнение это популярный хак, на котором часто строятся программные продукты, ожидаемое поведение.
Но!
В релизной сборке в компиляторе скорее всего включится оптимизация, которая посмотрит на код и решит, что a всегда меньше, чем a+1 и в итоге в результате компиляции в бинарнике у тебя будет:

bool Foo(int a) {
return true;
}

А теперь удачи отлавливать баг, которого ты не видишь (зависит от настроек компилятора), который может проявляться только на некоторых устройствах (особенно если ты делаешь кросс компиляцию) и который не повторяется у тебя на дебажной сборке. И ни в каких учебниках ты даже не узнаешь про эту мину (и примерно 2147483646 других мин), пока сам не столкнешься.

Го как раз и разрабатывался с мыслью "нахуй всю магию, всё должно быть всегда очевидно и работать в точности так, как пишется и ожидается". Там таких багов не будет.

Поэтому мой тебе совет, не начинай с плюсов, это прОклятый язык, который с каждым годом становится всё хуже, потому что его продолжают усложнять и вставлять в него новые ловушки.

Если не нравится го - это не проблема, начинай с Java (после 21 версии совсем хорошо должно быть), C#, Kotlin, да хоть Typescript.
Аноним 20/08/23 Вск 07:19:21 2812646 432
>>2812516

>2147483647 она вернет тебе false, так как a+1

О том, что числовые типы при переполнении изменяются циклически говорится то ли во второй, то ли в третьей главе, когда обсуждаются числовые типы. Кстати, GO ведет себя точно так же и в обоих случаях одна и та же простая логика - берется число с адреса где одни единицы, процессор добавляет один, получает число, которое содержит одну единицу и кучу нулей размером как раз с адрес, а по правилам когда число не влезает - отбрасываются старшие порядки, т.е. единственная единица. Это условность не языка программирования, а данных в компьютере.

Ну я не буду спорить, потому что не обладаю ни нужным опытом, ним сформированным мнением.
Аноним 20/08/23 Вск 11:14:15 2812729 433
Аноним 20/08/23 Вск 16:47:55 2813024 434
А есть способ в языке переопределить стандартные математические операции типа + и -? Или только пилить отдельные функции?
Ну как в крестах чтобы
Аноним 20/08/23 Вск 16:52:23 2813031 435
>>2813024
перегрузок опервоторов в го нет. и это очень хорошо)
Аноним 20/08/23 Вск 17:01:04 2813046 436
>>2812729

>В релизной сборке в компиляторе скорее всего включится оптимизация, которая посмотрит на код и решит, что a всегда меньше, чем a+1 и в итоге в результате компиляции в бинарнике у тебя будет:


Давай посмотрим с другой стороны: зачем тебе проверять а+1>а в принципе? Математически это всегда верно, но твоя проверка может быть только проверкой на переполнение. И вот какого-то хрена твоя проверка не работает. Для того чтобы знать о том что компилятор заменит твое выражения просто true надо знать и о свойствах численных типов и о свойствах компилятора, а для того чтобы не совершить ошибку тебе надо знать только о свойствах численных типов. Ты выбрал плохой пример.
Аноним 21/08/23 Пнд 03:06:10 2813382 437
>>2813046
Это был специально упрощенный пример для дискусси, призванный проиллюстрировать, какие вообще бывают ловушки. За более сложными велкам ту https://github.com/Nekrolm/ubbook , выбирай любую и охуевай

>>2812646
Суть не в том, что они переполняются, а в том, что компилятор перехерачит твой код очень своеобразным образом, на чем кстати основана львиная доля хаков и ещё большая доля багов. Захочешь работать плюсовиком - готовься без шуток посвятить всю жизнь борьбе с особенностями компиляторов.
Аноним 21/08/23 Пнд 14:50:19 2813794 438
Clipboard01.png 46Кб, 874x653
874x653
Всем привет!

Я тут откликался на всякие вакансии и вот мне прислали тестовое на Go. Я ниразу даже не читал про него (в вакансии было указано, что типа нужен опыт программирования на любом языке, поэтому и откликнулся), поизучал тут недельку и вроде работает, но конечно сомневаюсь чет. Можете глянуть плз, есть ли какие-то критичные косяки?
https://github.com/Ivansergee/medods-test
Аноним 21/08/23 Пнд 19:06:01 2814172 439
>>2813794
круто, что всё в main поместилось, но 100% у ревьюеров будет вопрос будешь ли ты весь код в main.go писать в реальных проектах. раздели хотя бы на хендлеры/репозиторий.
плюс юнит-тестов нет - с разделением ты сможешь хотя бы на моках протестить хендлеры. интеграционные тесты для репы тоже неплохо бы иметь, но честно говоря хз как там на гитхабе монгу поднимать в CI
Аноним 21/08/23 Пнд 20:05:56 2814285 440
>>2813794
Замени context.Background() на fiber.Ctx
Аноним 21/08/23 Пнд 21:43:49 2814380 441
>>2814172
Что имеется в виду под репозиторием?

>>2814285
Я честно говоря вообще не понял, что это такое, посмотрю, ок.
Аноним 21/08/23 Пнд 22:11:14 2814403 442
Аноним 22/08/23 Втр 05:50:59 2814515 443
>>2814172
Я переделал, теперь получше?
Не очень понял про этот репозиторий конечно. Я сделал просто пакет database и сложил туда все операции с бд в общем. Надо ещё пакет создать типа model и туда сложить структуру User? Я прост подумал ну там 2 сточки всего, ладно пусть там с логикой для бд полежит :)
Аноним 22/08/23 Втр 12:48:01 2814832 444
>>2814515
по больше части красиво.

глобальная переменная с БД выглядит странно. я бы положил в структуру, методами которой были бы хендлеры.
пакет utils считают антипаттерном, его можно назвать tokens.
юнит-тестов всё еще нет. хотя бы на токены можно сделать.
GetUser/UpdateUser по-хорошему должны контекст на вход принимать первым аргументом.
Аноним 22/08/23 Втр 16:16:39 2815322 445
>>2814832
Ну лан, спасибо. Почитал про utils, переименую) Мне уже сдавать надо прост. Тесты там же не говорили писать)) постоянно нихера не тестирую в своих работах, потом жопа подгорает конеш
Аноним 22/08/23 Втр 18:54:50 2815518 446
image.png 147Кб, 1351x220
1351x220
Ну и чего делать? OpenAPI говорит что date-time должно быть с таймзоной, api считает, что "ну не обязательно". Патчить спеку ну такое себе, патчить _gen.go - no way. Что остается?
Аноним 22/08/23 Втр 19:40:34 2815629 447
>>2815518
Забейте, там на каждом шагу такая хуита. Буду патчить спеку.
Аноним 22/08/23 Втр 23:46:33 2815828 448
>>2815518
OpenAPI это не говей, говей это ptotobuf+gRPC.
Аноним 23/08/23 Срд 09:45:03 2815994 449
Народ, слыште. Короче я PHP даун, на работе грят учить го, будем перехуячивать микрописюны. Как по быстрому выучить го? Сегодня начал писать сам себе сервис для сокращения ссылок. Ну типа как знаете, для отправления уведомлений на мобилку.

Но там не особо вижу где применять гошную хуйню вроде sync. Так же, у вас блять фреймворки есть сука? Я попробовал gin, хуйня какая-то ебучая. Стал тупо гориллу юзать для роутинга
Аноним 23/08/23 Срд 13:00:16 2816196 450
>>2815994
>Стал тупо гориллу юзать для роутинга
молодец
>Но там не особо вижу где применять гошную хуйню вроде sync
ну смотри. вейтгруппы - для параллельных сетевых запросов, например в соседние сервисы. мутексы - если ты там ну например кешируеш в памяти што-то к чему может идти параллельные чтения и запись. для микроговна это по большому счету все юзкейсы.
Аноним 23/08/23 Срд 15:18:37 2816366 451
image.png 53Кб, 590x720
590x720
https://go.dev/play/p/sJXz20fJI5d

Задача:
Написать программу, которая использует две горутины, которые выводят числа от 1 до 100 поочередно

Вопрос:
Гарантируется ли, что в такой реалзиации (пикрил) мы прочитаем число из второй горутины, отправляя его из 1й? Может ли быть так, что мы начнем читать из канала в горутине, которая пишет в этот же канал?
Аноним 23/08/23 Срд 21:42:39 2816743 452
>>2816366
> Может ли быть так, что мы начнем читать из канала в горутине, которая пишет в этот же канал?
Канал не буферизованный, значит чтение и запись блокирующие, т.е. горутина не может читать и писать в канал в цикле - будет дедлок
>Гарантируется ли, что в такой реалзиации (пикрил) мы прочитаем число из второй горутины
Если не буферизованный канал - да. Иначе в теории возможно.

Ну и одна из двух горутин утекает при такой реализации, в прод такое не должно попадать.
Аноним 23/08/23 Срд 21:43:17 2816744 453
>>2816366
> Может ли быть так, что мы начнем читать из канала в горутине, которая пишет в этот же канал?
Канал не буферизованный, значит чтение и запись блокирующие, т.е. горутина не может читать и писать в канал в цикле - будет дедлок
>Гарантируется ли, что в такой реалзиации (пикрил) мы прочитаем число из второй горутины
Если не буферизованный канал - да. Иначе в теории возможно.

Ну и одна из двух горутин утекает при такой реализации, в прод такое не должно попадать.
Аноним 25/08/23 Птн 00:07:12 2817730 454
Го используется где-нибудь помимо веба? А то это мой первый язык програмирования (хотя вторым и третьим щупал сишарп с жаваскриптом) и думаю есть ли альтернативы для вката.
Аноним 25/08/23 Птн 05:09:07 2817773 455
>>2817730
Выбор у тебя между бэкендом и бэкендом. Бэкенд для вебсайтов, бэкенд для энтерпрайзной приложухи.
Смежно можешь ДевОпс посмотреть, но для этого бэкенд опыт все равно нужен.
Аноним 25/08/23 Птн 17:52:51 2818374 456
>>2817730
>Го используется где-нибудь помимо веба?
Я видел прикольный iot фреймворк на go https://gobot.io/ Можно писать drone.Event("flying"), gobot.After(3⋆time.Second, func() { drone.Land() } ну и подобное. Думаю вполне под iot и умные дома подойдёт.
Аноним 25/08/23 Птн 18:16:21 2818439 457
>>2817730
возьми все юзкейсы питона и убери датасаенс и эксель. получишь примерно то, что есть.
Аноним 25/08/23 Птн 18:18:37 2818446 458
>>2818439
или сишарпа и убери геймдев и гуи.
ну или пхп и добавь консольные приложения.
ну или руби и и и я хз че с руби.
Аноним 25/08/23 Птн 19:47:39 2818632 459
image.png 52Кб, 466x693
466x693
image.png 25Кб, 560x768
560x768
Задача:
Основное преобразование указателей:
Напишите функцию, которая принимает целое число, использует пакет unsafe для преобразования его в указатель, а затем обратно преобразует его в целое число.

Нейронка на пикрил1 решение ответила следующим:
"В основной функции вы определяете целое число a, а затем передаете его функциям BackAndFourthUnsafe и BackAndFourthUnsafe2. Эти функции пытаются преобразовать указатель на num обратно в целое число. Однако, поскольку num является локальной переменной внутри основной функции, к моменту попытки разыменования его указателя он может выйти за пределы области видимости."
И предлагает пикрил2

Мое мнение по этому поводу:
"Не вижу в чем мой код создает "undefined condition". Во втором случае значение num копируется в функцию, затем мы получаем указатель на это значение в стеке (поскольку мы находимся внутри функции), сохраняем его внутри переменной. Далее мы разыменовываем значение, копируем его значение в b и возвращаем b."

Вопрос:
Правильно ли я решил задачу? Где прочитать про то, что высрал чатгпт, потому что я что-то такое слышал в лекции по unsafe про то, что сборщик мусора удаляет ненужные вещи при неправильной работе с Pointer, , но ничего так и не понял
Аноним 25/08/23 Птн 23:40:26 2818807 460
>>2815828
В реальном мире бывает вообще только десятки неструктурированных методов без единого формата ответа, какой нафиг protobuf и gRPC
Аноним 26/08/23 Суб 00:01:01 2818812 461
>>2818807
>В реальном мире бывает вообще только десятки неструктурированных методов без единого формата ответа
Ну так не работайте в говноконторах.

У нас все через gRPC, один раз задекларировал протокол и потом под любой язык можно сгенерировать клиент и сервер. Да можно все и с помощью OpenAPI делать, но у реста хуже возможности, хуже производительность, хуже производительность сериализации/десериализации. Из плюсов - можно дергать прямо из браузера, т.е. один и тот же эндпоинт можно дергать со странички и других сервисов хотя я с трудом представляю себе такой юзкейс.
Аноним 26/08/23 Суб 00:21:48 2818818 462
>>2818812
> будьте богатыми и не болейте
Я нищий фрилансер без портфолио, не от хорошей жизни в этот кал лезу
Аноним 26/08/23 Суб 02:48:23 2818846 463
>>2818632
Не знаток этой камасутры с байтами, но предположу, что в своей реализации, ты берешь адрес локальной переменной backAndFourth функции, т.е. в случае когда локальная переменная не сбегает в кучу (возможно при неправильной работе с Pointer), то при присвоении значения переменной внешней функции указатель уже будет ссылаться не на int.
Аноним 26/08/23 Суб 11:11:43 2818969 464
Сложно ли свитчнуться с 3 годами Джавы в го? Берут ли без опыта но со знаниями языка?
Аноним 26/08/23 Суб 13:37:17 2819057 465
Я смотрю тут с Джавы люди перекатываются, интересна мотивация, чтобы что
Аноним 26/08/23 Суб 13:41:35 2819063 466
>>2819057
Джава бесит прост, заебало разгребать легаси код на легаси языке. Джава - душное говно, хочется какой-то легкости, глотка свежего воздуха.
Аноним 26/08/23 Суб 14:08:56 2819083 467
>>2819057
Очевидно заебались легаси ковырять
Аноним 26/08/23 Суб 15:48:04 2819243 468
>>2818632
>к моменту попытки разыменования его указателя он может выйти за пределы области видимости
хуйню морозит этот тостер. из функции int возвращается бля, где там разыменование после выхода?
Аноним 26/08/23 Суб 17:33:04 2819372 469
Анончики, а нет тут случайно тех кто в Ката академи учится на курсе Go? Вроде как по отзывам там лютейшее задротство но выходишь спустя ~9 мес прям очень крепким кандидатом, было бы интересно узнать мнение из первых уст.
Аноним 26/08/23 Суб 18:31:23 2819416 470
>>2818818
Ну так и не обобщай тогда

>В реальном мире бывает
по разному.
Аноним 27/08/23 Вск 07:28:30 2819778 471
На всех вакансиях просят на Go коммерческий опыт, как вы свитчитесь?
Аноним 27/08/23 Вск 10:52:09 2819848 472
>>2819778
Сейчас везде депрессия и тухляк, при чем тут го
Аноним 27/08/23 Вск 11:25:52 2819877 473
>>2819848
Люди свитчатся с Джавы как-то, вот хочу узнать.
Аноним 27/08/23 Вск 11:51:39 2819896 474
>>2819877
Я говорю про рынок в целом, сейчас ты бизнесу не нужен если не начнешь приносить деньги уже на следующий день. Поэтому нахуй нанимать чуваков которые будут тупить пол года год пока во все въедут? Никак не свитчатся
Аноним 27/08/23 Вск 12:01:56 2819900 475
Аноним 27/08/23 Вск 13:46:09 2820036 476
>>2819778
>как вы свитчитесь?
Как правило на сеньорные вакансии опыт в конкретном языке уже не играет роли. Я писал на Джаве, меня собесили на Джаве, а когда вышел сказали учить Го а могли сказать учить С++, смотря в какую команду бы попал.
Аноним 27/08/23 Вск 14:21:48 2820067 477
>>2820036
Бля никто бы тебе не сказал учить плюсы, не пиши кринж, "сеньёр"
Аноним 27/08/23 Вск 15:03:32 2820108 478
>>2820067
>Бля никто бы тебе не сказал учить плюсы, не пиши кринж, "сеньёр"
Вкатунидзе, не пизди про вещи в которых не шаришь.
Аноним 27/08/23 Вск 15:23:41 2820130 479
>>2820036
Очень и очень спорная хуйня. Ситуация, когда тебя нанимают на хз какой язык это пиздец и нормальные конторы таким не занимаются.

Как правило вариантов развития событий два:
1) Тебя сразу нанимают как сеньора в конкретном стеке, скажем в компании основной стек это джава и тогда тебя нанимают как сениор джависта, ожидая, что ты очень хорошо шаришь за jvm, инфраструктуру, бест практисы, экосистему и так далее. Этот вариант самый распространенный и самый же нормальный, потому что будь ты хоть уберсеньором на другом стеке, тонкости ты быстро не выучишь и к ним не приноровишься и первое время будешь на уровне условного миддла.
2) Тебя нанимают в первую очередь как сильного специалиста и готовы заливать тебя деньгами, пока ты не научишься чему они там хотят. Так делают всякие бигтехи типа убера, амазона и прочих. Но даже там тебя не кидают хз куда, в конце процесса найма тебя собесят уже в конкретные команды и на этапе оффера тебе предложат одну или несколько команд. У меня так друг-бекендер пошел писать мобилки за x4 зп.
Аноним 27/08/23 Вск 15:37:36 2820136 480
>>2820130
>Тебя сразу нанимают как сеньора в конкретном стеке
Бизнес иногда переписывает весь свой код с языка Х на язык Y, по разным причинам.
Найти сеньора в двух этих языках на рынке труда мало вероятно, проще нанять сеньку в одном из них и доучить на месте.
Аноним 27/08/23 Вск 15:57:38 2820144 481
>>2820108
Да ты сам стяни ебало, сеньер помойный. 10 лет тягал джейсоны и тут ему дали задание "плюсы изучи", ты как себе это представляешь чмоха сельская? Ты кто вообще? Выпускник мита в фаанге или че? Смех да и только блять
Аноним 27/08/23 Вск 16:36:33 2820164 482
>>2820136
В этом случае тебя будут нанимать или как сеньора(миддла) в языке X, или в языке Y.
Нанимать сеньоров на полную ставку на язык, в котором они не разбираются - это абсолютное расточительство, потому что платить им нужно по сеньорски сразу, сеньорами в новом стеке они станут потом.
Глупо с этим спорить.
Аноним 27/08/23 Вск 16:45:58 2820169 483
image.png 423Кб, 2363x1290
2363x1290
image.png 122Кб, 1672x626
1672x626
image.png 1401Кб, 2757x2612
2757x2612
>>2820130
>Ситуация, когда тебя нанимают на хз какой язык это пиздец и нормальные конторы таким не занимаются.
Гугл и Амазон вообще не указывают язык, Майки указывают просто список типичных языков даже Джава там есть.

>Тебя нанимают в первую очередь как сильного специалиста и готовы заливать тебя деньгами, пока ты не научишься чему они там хотят. Так делают всякие бигтехи типа убера, амазона и прочих.
Не только, вот например https://careers.hellofresh.com/global/en/job/5010175/Principal-Software-Engineer-m-f-x как видишь там несколько языков. И по опыту общения с ними, могу сказать что знание только джавы им тоже ок.

>Но даже там тебя не кидают хз куда, в конце процесса найма тебя собесят уже в конкретные команды и на этапе оффера тебе предложат одну или несколько команд.
Не совсем так. На момент собеседования твоя команда еще не ясна, она будет ясна на момент оффера. У нас вообще несколько языков используется, основной Го, но есть части на Джаве и Питоне.
Аноним 27/08/23 Вск 16:53:47 2820171 484
20230827155006.jpg 277Кб, 4032x1860
4032x1860
>>2820144
>Ты кто вообще? Выпускник мита в фаанге или че?
Аноним 27/08/23 Вск 19:08:41 2820329 485
>>2820169
> Гугл и Амазон вообще не указывают язык,
и предложением ниже я указал почему

> знание только джавы им тоже ок.
вообще мне не противоречит

> На момент собеседования твоя команда еще не ясна
и при этом я специально написал "в конце процесса найма тебя собесят уже в конкретные команды"

На двачах смотрю ничего не меняется, люди как не умели читать дальше первого слова в предложении, так и не научились
Аноним 27/08/23 Вск 19:29:16 2820367 486
>>2820329
>вообще мне не противоречит
А кто писал
>Так делают всякие бигтехи типа убера, амазона и прочих.
не ты? Или ты будешь заявлять что HelloFresh это бигтех?

>и при этом я специально написал "в конце процесса найма тебя собесят уже в конкретные команды"
Нет, не собесят тебя в конкретные команды. Хайринг комити решает в какую команду тебя звать, никаких дополнительных собесов с командой - нет.

>На двачах смотрю ничего не меняется, люди как не умели читать дальше первого слова в предложении, так и не научились
Дурак, ты сам в контекст не можешь, а на других киваешь.
Аноним 27/08/23 Вск 19:34:41 2820380 487
Вот вам Авито https://hh.ru/vacancy/85709644?from=employer&hhtmFrom=employer
По языку требования
>имеете от 3х лет опыта коммерческой разработки на языке Go либо владеете Python и одним из типизированных языков C/C++, Java, C#;

Если тебя не берут, это потому что ты тупой и ни на что не годный, а не потому что нельзя свичнутся.
Аноним 27/08/23 Вск 21:28:14 2820532 488
>>2820380
Конечно, если вакансия весит это значит что им кто то сейчас нужен. Реальность же не такова что твое резюме даже не посмотрят
Аноним 28/08/23 Пнд 00:01:52 2820613 489
>>2820532
>Реальность же не такова что твое резюме даже не посмотрят
Моё - посмотрят.
Аноним 28/08/23 Пнд 04:13:54 2820663 490
>>2819778
Пытаюсь свичнуться с начала августа, за все время получил один оффер и 3 приглашения на собес, сейчас подвис второй.
Опыта прямо разработки около 7 лет на разных стеках, последние 3 года энтерпрайз микросервисы на джаве.
HR сами пишут из крупняков, VK, Ozon, Avito, Yandex. От мелких контор 95% отказов, либо просто смотрят резюме. Видимо кто имеет возможность пылесосить рынок и расширяется, те заинтересованы.
Написал пару простеньких петов + решение тестового задания выложил на гитхаб. Что характерно гитхаб никто ни разу не смотрел, хотя ссылка на него и в профиле и в резюме на ХХ.
Лето - обычно тухлый сезон, в отпусках многие.
Если около джуниор, то как вариант попробуй стажировки от крупняков, их обычно в конце лета открывают, чтобы затянуть студентоту, но возрастного ценза как такого нет.
Мне кажется вариант свичнуться есть, но на активный поиск может уйти пара месяцев.
А так разве что крупняки - единственный вариант, у них обычно несколько этапов отбора на которых отсекаются те, кто просто го-тур прошел, могут себе позволить размеряно перебирать.
Аноним 28/08/23 Пнд 09:59:34 2820729 491
>>2820613
Угу, твое же кладется алгоритмами в отдельную стопку
Аноним 29/08/23 Втр 09:01:25 2821688 492
Как эффективно управлять отменой функции из-за истечения времени ожидания, не сталкиваясь с оставшимися горутинами?

У меня возникла проблема с следующим фрагментом кода, который иллюстрирует проблему. В этом сценарии я делаю 100 попыток получить определенное значение, и каждая попытка занимает значительное количество времени (50 секунд). В результате заданное время ожидания в 5 секунд начинает играть роль тайм-аута. Несмотря на то, что горутины GetSomething завершаются в пределах 5-секундного тайм-аута, горутины doGetSomething остаются в памяти в течение всего 50 секунд. Как я могу решить эту ситуацию и предотвратить продолжение работы горутин doGetSomething после их предполагаемого времени отмены?

Вот код:
https://pastebin.com/2HxLNgi1

Вот тред на стэковерфлоу с этой проблемой:
https://stackoverflow.com/questions/6807590/how-to-stop-a-goroutine

Там был ответ про томб, но там чето все плохо и рандомные паники в рандомных местах
Аноним 29/08/23 Втр 10:38:58 2821758 493
>>2821688
Пакет context решает как раз эту задачу
Аноним 29/08/23 Втр 10:52:26 2821765 494
>>2821758
Нихуя не решает, горутина doGetSomething все равно зависнет на 50 секунд
Аноним 29/08/23 Втр 11:07:41 2821780 495
>>2821765
Тебе нужно в ней обрабатывать контекст. В случае с таймером можно заменить time.Sleep на time.After и делать select по таймеру и по контекст.done. В реальном коде уже смотри по обстоятельствам
Аноним 29/08/23 Втр 11:09:10 2821783 496
>>2821765
Ты хочешь чтобы она магическим образом завершилась? С хуя ли она должна? В ней написано спать 50 сек вот она и будет спать и ничего более.

Передавай контекст в doGet... и явным образом программируй ручками завершение функции, если был запрошен кансел.
Аноним 29/08/23 Втр 11:32:47 2821818 497
>>2821783
>>2821780
Хочу, чтобы был GoroutineKill, а не for цикл с проверкой <-time.After или <-context.Done.
Я просто не понимаю, почему так охуенно придумано, что я должен 150 раз проверять, если ли смысл горутине жить, вместо того, чтобы просто ебнуть её, когда она не нужна
Аноним 29/08/23 Втр 12:09:06 2821866 498
>>2740805 (OP)
Как изучить алгоритмы и структуры данных?
Аноним 29/08/23 Втр 13:06:27 2821930 499
>>2821818
>Я просто не понимаю, почему так охуенно придумано, что я должен 150 раз проверять, если ли смысл горутине жить, вместо того, чтобы просто ебнуть её, когда она не нужна
Потому что убийство горутины не даёт ей корректно завершить работу. Это у тебя горутина ничего полезного не делает и её можно убить. А в реальном коде могут быть открыты файлы, сеть, базы данных и их надо корректно закрыть. Горутина может держать блокировку и надо её освободить. В конце концов надо что бы горутина была в сейфпоинте иначе могут быть проблемы с памятью.
Аноним 29/08/23 Втр 13:17:35 2821948 500
Аноним 29/08/23 Втр 13:19:10 2821951 501
>>2821818
может тебе ще goto вместо if и for?
Аноним 29/08/23 Втр 13:35:08 2821979 502
>>2821930
А почему нельзя тогда планировщику сказать, чтобы он снял блокировки и её разъебал, он же их там паркует, создает, убивает и тд. ?

>>2821951
goto и так есть, хочешь - пиши через него вместо if/for
Аноним 29/08/23 Втр 13:55:18 2822001 503
>>2821866
tl;dr: дрочи литкод
Изучи базовые структуры данных и сложности основных алгоритмов над ними: массив, связный список, хэшмапа, бинарное дерево поиска, куча, стек, очередь.
Из книг рекомендую "Алгоритмы на Java" Седжвика, на курсере есть курс по материалам книжки, записанный автором.
Возьми премиум на литкоде и начни решать easy задачи по базовым структурам. С премиумом у тебя будет возможность посмотреть разжеваное решение, хотя годные с объяснениями встречаются и среди решений других пользователей. Плюс литкода в том, что там иногда приводятся техники решения задач, которые не в каждом учебнике описаны - запоминай их.
Когда освоишься с изи, переходи на медиум, порешаешь задачи на динамическое программирование жадные алгоритмы, научишься комбинировать разные приемы работы с базовыми структурами в одной задаче,
Этого должно хватить даже для ФААНГА.
Аноним 29/08/23 Втр 14:07:47 2822015 504
>>2821979
Как ты себе это представляешь? Для планировщика горутины это черные ящики, которые находятся в некотором состоянии или намереваются перейти в одно из этих состояний, он оперирует ими исходя из этих состояний. Планировщик не знает, что именно делает горутина и можно ли ее прихлопнуть не дожидаясь завершения. Горутины завершаются сами собой или прерываются паникой.
Аноним 29/08/23 Втр 15:47:38 2822112 505
>>2821979
>А почему нельзя тогда планировщику сказать, чтобы он снял блокировки и её разъебал, он же их там паркует, создает, убивает и тд. ?
Потому что блокировка это не какая-то сущность рантайме, а просто тип который реализует некий функционал. Или вообще блокировка в другом месте, например ты создал WaitGroup(5), запустил 5 горутин и делаешь Wait(), а горутины должны вызвать Done(). Или ты вообще дохуя умный и написал свой спинлок. Или как по твоему планировщик должен понять, что надо конект к базе закрыть?

В джаве у класса Thread был метод stop() но его отключили именно из-за того что нельзя безопасно освобождать ресурсы. В C# аналогичный метод тоже задеприкейтили.
Аноним 29/08/23 Втр 15:49:34 2822115 506
>>2822001
>Этого должно хватить даже для ФААНГА
В ФААНГах самое сложное это behavioral interview.
Аноним 29/08/23 Втр 18:52:19 2822386 507
Аноним 29/08/23 Втр 23:17:55 2822611 508
>go: homebot/pkg/storage/sqlite imports
> modernc.org/sqlite tested by
> modernc.org/sqlite.test imports
> modernc.org/tcl: modernc.org/tcl@v1.15.2: reading >https://proxy.golang.org/modernc.org/tcl/@v/v1.15.2.zip: 403 Forbidden

Петушиный мув петушиной конторы
Аноним 30/08/23 Срд 15:24:11 2823361 509
>>2822611
Без : на конце всё нормально качается.
Аноним 30/08/23 Срд 22:02:59 2823934 510
>>2823361
Не качается, это тупой блок по ip/подсети.
Аноним 31/08/23 Чтв 10:30:06 2824210 511
Я тут писал раньше >>2813794
Они вот сейчас посмотрели задание и написали, что я иду нахер по причине "Для обновления токенов не нужен токен доступа, что делает выдачу access токена бессмысленным."
Вы не могли бы пояснить, а то я не понял, что не так сделано, мне прост интересно. Типа нужно access проверять для рефреша тоже?
Аноним 01/09/23 Птн 02:59:16 2825417 512
>>2824210
Возможно, имеют в виду, что нужно передавать пару accessToken + refreshToken для рефреша. В условии задания сказано, что access и refresh токены обоюдно связаны. Т.е. нужно как-то эту связь на беке проверить, например использовать accessToken как "соль" для вычисления хэша рефреш токена, который ты в БД сохраняешь в привязке к юзеру. Тогда, при рефреше будет условно гарантировано, что пара токенов из запроса принадлежит конкретной сессии пользователя.
Но это как-то все равно не повышает секурности, т.к. скорее всего спиздят оба токена, если есть риски на клиенте или соединение дырявое.
Например у того же реддита для рефреша нужен только рефреш токен
https://github.com/reddit-archive/reddit/wiki/OAuth2
Возможно, оба токена в БД хранят, лол.
Аноним 01/09/23 Птн 05:45:32 2825433 513
>>2740805 (OP)
Подскажите лучшие практики по написанию микросервиса под прод.
Gin + Gorm всё ещё торт? Ну и чтобы поменьше ёбли было с тестами, есть ли какое-то фримворк или всё ещё руками пишете?
Обязательная поддержка .env файликом, чтобы была среда .env.test .env.local .env.prod(stage) итд итп

Раньше вот как-то писали директории /project/cmd/api/main.go, какая сейчас структура проекта?
Аноним 01/09/23 Птн 14:34:35 2825887 514
Аноним 01/09/23 Птн 18:03:59 2826226 515
>>2825417
>Но это как-то все равно не повышает секурности, т.к. скорее всего спиздят оба токена, если есть риски на клиенте или соединение дырявое.
Это может повысить секурность, если рефреш лежит в отдельном сервисе рефреша токенов. И когда у основного приложения протухает аксес токенов, оно идёт в сервис рефреша с протухшим токеном, и тогда рефреш уже с двумя токенами рефрешит аксес. Таким образом ни один сервис не хранит у себя 2 токена и злоумышленнику надо спиздить 2 базы.

>>2824210
Что-то ребята совсем ахуели. Мало того что такие вещи джунам задавать, так ещё и требовать догадываться о таких не явных требованиях. При том что сами т.з. внятно и без грамматических ошибок не могут написать.
Аноним 02/09/23 Суб 00:38:22 2826508 516
Аноним 02/09/23 Суб 07:45:50 2826560 517
image.png 22Кб, 327x558
327x558
>>2826508
Я вот чаще вижу api директорию внутри cmd, а так в целом всё так
Аноним 02/09/23 Суб 07:59:55 2826563 518
>>2826560
в проекте может быть несколько api директорий, хз что ты имеешь в виду.
у нас например в /api хранятся ямлы для кодогенерации рестохуйни. а main.go апишки в /cmd/service.
я вполне вижу, что вместо service кто-то называет свой бинарник api, но не представляю кто будет бля ямлы складывать в /cmd/api.
Аноним 02/09/23 Суб 08:07:07 2826567 519
>>2826563
>/cmd/service

Настолько зашкварно в голанке использовать сущности?
/cmd/entities
/cmd/repositories

Имхо, DDD для джавадолбаёбов, но как часто меняется коннектор к базе данных? Если я использую тот же Gorm, то зачем создавать репозиторий, если можно круды написать в слое сервиса. Keep it simple
Аноним 02/09/23 Суб 08:25:03 2826576 520
>>2826567
Ты хотел сказать насколько? Нормальная практика, на любом языке круд шлепается +- одинаково, зачем изъебываться и придумывать свое.
Аноним 02/09/23 Суб 11:49:07 2826662 521
>>2826226
Да лан, там 1к откликов было, ещё и с зарплатой вакансия, офк там будут че-то требовать. Хоть задание прислали и посмотрели даже. обычно прост игнорят.
Аноним 02/09/23 Суб 17:12:46 2826921 522
>>2826567
>/cmd/entities
>/cmd/repositories
это идёт в /internal или pkg или тупо корень проекта. в /cmd мейн пакеты бинарников сервиса - апиха/кроны/консюмеры очередей. у нас усредненно примерно такая структура проекта

/cmd/service - апиха
/cmd/consumer - обработчик очереди
/cmd/zalupa_updater - какой-нибудь крон
/internal/clients/ - папки с клиентами в другие сервисы
/internal/rpc/
- папки с хендлерами апихи
/internal/queue/ - папки с хендлерами топиков
/internal/repositories/
- репки
/internal/services/* - бизнес-логика
/internal/models - внутренние модельки сервиса

>Если я использую тот же Gorm, то зачем создавать репозиторий, если можно круды написать в слое сервиса
да хоть в хендлере. хз насколько тебе удобно юнит-тесты писать только, если репу не прятать за интерфейс чтобы можно было замокать
Аноним 03/09/23 Вск 00:22:05 2827361 523
>>2822001
А собственно сейчас в норм конторах алгоритмические задачки при устройстве на Go вакансию просят решать на голанге, или можно хоть на питоне ?
Аноним 03/09/23 Вск 00:50:51 2827372 524
>>2827361
На выбор обычно 4-5 языков, которые в компании используются.
Можешь проходить на одном из них, если в маркетплейсы, то скорее всего будет пхп, если в финтех, то вместо php java.
Но алгосекция возможно вообще на любом разрешат, кроме совсем нишевых.
Меня например собеседовал андроиддевелопер, который не знал по сути го, но в целом шарил за алгоритмы и cs.
Аноним 03/09/23 Вск 14:10:37 2827691 525
>>2827361
Зависит от компании. Кто-то готов на любом языке, а кто-то хочет посмотреть насколько ты хорошо знаешь Го, можешь ли писать код на бумажке.

Меня в Цукербук собесил питонист, а я писал код на джаве и все было ок. Алгоритм он и на Го алгоритм.
Аноним 04/09/23 Пнд 09:36:09 2828395 526
invalid import path (invalid character U+003A ':')
invalid import path (invalid character U+005C '\')

как контрить эту ебанину когда импортируешь файл из другой папки? Вручную менять пробовал, компилятор слал меня нахуй
Аноним 04/09/23 Пнд 09:48:33 2828399 527
А правда, чтобы вкатиться в голанг не нужно поработать на РНР или другом бэкенд-языке?
Аноним 04/09/23 Пнд 10:24:50 2828428 528
>>2828399
Правда, если пиздеть об опыте работы
Аноним 04/09/23 Пнд 12:30:18 2828551 529
>>2828395
что ты понимаешь под "импортированием файла"?
Аноним 04/09/23 Пнд 15:45:10 2828887 530
>>2828551
Ну вот есть у меня в папке cmd файл main.go в нем пишу импорт и ввожу путь к файлу конфига. Точнее когда ввожу cfg := config.MustLoad() то он автоматически указывает путь к файлу config.go но потом прога начинает выебываться как показано выше. Начинаю своими руками вводить путь к config.go - тоже шлет нахуй
Аноним 04/09/23 Пнд 17:11:18 2829003 531
>>2828887
Пробовал не костылить свои конфиги, а использовать готовую либу Envconfig ?
Аноним 04/09/23 Пнд 18:16:12 2829073 532
>>2828428
Разве голанг полноценный язык? Я слышал, что на нём пишут отдельные высоконаруженные вставки, а остальное на основном языке.
Аноним 04/09/23 Пнд 18:18:28 2829075 533
>>2829073
Это правда, хитровыебанную бизнес-логику выносят на отдельные сервисы. Там, где всякая ебань делается в две строчки. Ну это пользовательский ввод, там никогда не нужно быстро что-то решать.
А так да, на голанге у нас был сервер автобиддеров и балансировщик, который 10 запросов в минуту решает, кек
Аноним 04/09/23 Пнд 18:22:13 2829083 534
>>2828887
какая версия go?
используй go modules, с ними проблем нет, тебе нужно импортировать пакет, а не отдельный файл
import "moduleName/someDir/packageName"
Я тонкостей не знаю импорта, просто создаю под каждый пакет одноименную директорию в проекте и оно работает.
Аноним 04/09/23 Пнд 22:49:08 2829371 535
>>2829073
Где как. Где-то пишут конкретные высоконагруженные сервисы, где-то всё подряд.
Выносят обычно в случае монолитов на каком-нибудь php или пистоне, где основной язык принципиально тормозной. Та же джава или шарпы сами по себе быстрые и ещё и под конкретный профиль нагрузки тюнятся лучше за счет настройки гц и вынос кода с джавы на го действительно целесообразен довольно редко, или когда код очень прожорливый по памяти и jvm тупо стоит многа деняк, или когда очень нужен мгновенный бутстрап сервиса не дожидаясь, пока jvm прогреется. Чаще всего же переписывают просто из-за технического хайпа, программерам нужно решить проблему тормозов и хочется попробовать новый расхайпленный язык и микросервисы, а тех руководство идёт у них на поводу.
Для написания бизнес логики го подходит, всяким станным людям из интернета здесь на слово верить не стоит. Логика выглядит многословнее и всё такое, но в целом я за последние несколько лет написания на го всякого особых проблем не встречал, любые паттерны и стратегии в целом программируются. Другой дело что лично я подустал уже от всех этих явных проверок на нил и отсутствия той же функции map() в стандартной библиотеке, хочется чего-то поизящнее. Выбрал бы раст, он почти как го, только не настолько примитивный, так ведь особо не пишет на нём никто бэкенды

На мой взгляд у го несколько странная ниша такого себе "С++ для тупых", с одной стороны оно компилируемое и поэтому работает быстро и недорого, а с другой есть гц и планировщик и не нужно приседать с указателями и программированием на темплейтах как в плюсах. С другой стороны, почему бы и нет, те же Badoo всё очень правильно делают. Наняли 300 пехапешников для того чтобы лепить фичи и 50 гошников, чтобы делать для пехапешников инфраструктурные сервисы.
Аноним 05/09/23 Втр 08:02:01 2829514 536
>>2829371
Я вот не знаю куда лучше идти: в пхпшники или в гошники.
Аноним 05/09/23 Втр 10:19:14 2829620 537
Вопрос по VS Code.
У меня в папке есть много мелких проектов на го. Хотелось бы с ними работать из корневой папки. Но гошный плагин для вс кода начинает выделываться и пишет ошибку пакета main, из-за того, что проект во вложенной папке. Как сделать, чтобы вс код понимал вложенные папки и не писал об ошибке там, где их нет?
Аноним 05/09/23 Втр 13:43:50 2829789 538
>>2829620
ну попробуй разобраться с гошными воркспейсами. может оно просто после go work init в корне заработает.
или как вариант вместо открытия родительской директории добавить все подпроекты в вскодовский воркспейс.
ну или не ебать мозги и просто сделать всё одним модулем.
Аноним 05/09/23 Втр 21:10:55 2830343 539
>>2829514
почему не оба? ну то есть смотри гошка не то чтобы за дохуя времени учится, а пыха это почти гарантированное трудоустройство где ты будешь благородно поддерживать легаси, которое через 3 года перепишут на го. ты вполне можешь задрочить пыху и выучить основы гошки, которые на собесах могут спросить. и всегда иметь пыху как запасной аэродром, если не пройдешь на стажировку гошнеком.
Аноним 05/09/23 Втр 22:02:29 2830394 540
Вечер в хату. Nix админ 10+ лет стажа. Хотел в девопс перекатится, изучал так неспешно ансиблы, тераформ и вот это всё, как наткнулся на go, и что то он мне неожиданно пиздец как понравился, я такой кайф последний раз чувствовал когда на Си кодил давным давно. Так то я много на чём кодил(ну как кодил, небольшие тулзы для автоматизации админских задач, в основном на питоне или повершеле, что то более менее серьёзное типо модулей ядра или подобного я в институте давным давно на Си писал) но это прям оче понравилось, структуры эти все, обработка ошибок без трай кетчей. И я вот подумал... а что если не в девопсы а в прохрамисты перекатиться? Но, я никогда в кодеры не метил, за свой 15+ летний опыт в ит, мне из языков только Си нравился, но я обьективно оценивая свой мозг понимал, что я не смогу быть програмистом на Си, т.к. я не настолько умный, кернел хакер из меня не выйдет. Чё щя вообще джуны на голанге пишут, орентировочно? Насколько это вообще хуёвая затея и реально ли перекатиться? На деньги впринципе похер, го я в любом случае дальше изучать буду как замену питона для автоматизации админских задач, просто хочется больше опыта получить и узнать язык получше на практических задачах.
Аноним 05/09/23 Втр 22:07:51 2830401 541
>>2830343
>где ты будешь благородно поддерживать легаси, которое через 3 года перепишут на го
В голос с этих фантазий. Уж скорее на джаву перепишут, чем на Го, а более вероятно, что всё так и останется на пыхе.
Аноним 05/09/23 Втр 23:21:31 2830453 542
>>2830401
ну я конечно преувеличил, но у нас-то монолит распилили почти
Аноним 06/09/23 Срд 00:28:20 2830470 543
>>2830401
Я не он, но это в целом очень популярный кейс, сначала пишут монолит на php, который приносит деньги и всё такое, а потом в какой-то момент упираются в то, что он хуево написан, там уже есть годичные кольца говнокода, это все медленно, неэффективно и тп и начинают переписывать его на микросервисы, и как правило в пару берут именно го, потому что простой и эффективный и не жрет столько же, сколько джава. Кейсов php->го было уже дофига, озон, лямода, авито, тд и тп. А вот php->джава особенно не помню.

>>2829514
Я, будучи гошником, тем не менее рекомендовал бы идти поначалу в нормальный проект на php, потому что:
1) Рынок на пыхе больше, больше вакансий, легче искать и перебирать;
2) Хз насколько это актуально сейчас, но на пыхе больше аутсорса и раньше было легче найти что-то за $ или как минимум выше локального среднего по рынку, особенно ты не в Москве живешь;
2) Пыха больше склонна к фрейморкам, что является большим подспорьем для новичка, есть миллион гайдов, примеров "как делать", да и в целом ты работаешь и растешь на какой-то архитектуре. В го же, наоборот, фреймворки не любят и каждый проект собирается в соответствии со взглядами конкретного лида (в лучшем случае) или девелопера (в худшем); Поэтому на пыхе тебе будет и легче, и ты приобретешь больше архитектурного опыта и знания паттернов, для новичков это очень полезно;
3) Го это в целом довольно примитивный язык, без негативных коннотаций, просто по факту: в языке очень мало встроенных возможностей, даже дженерики до сих пор каличные; Новичку как правило лучше набраться кругозора и потрогать/посмотреть больше вещей и здесь какие-то более богатые языки подойдут лучше. Хотя бы тайп юнионы научишься использовать, простейшую функциональщину array_map вроде ещё не запретили и прочее;
4) Го как правило в компании появляется всё же как второй язык и поэтому чаще всего это уже взрослые проекты в фазе переписывания. Это тоже и снижает количество опций для джунов в индустрии, и зачастую повышает требования.

Но тут ключевое требование это
> _нормальный_ проект на php
Сама пыха стала с годами сильно лучше, но там всё равно велик шанс нарваться на очень говняный проект, который тебе ничего хорошего кроме денег не даст и не научит. Поэтому, маст хев: symfony или laravel, php8+ (чем больше, тем лучше, старая версия обычно означает хуевое легаси. 7+ ещё нормально, 5+ не бери ни в коем случае), использование встроенной в язык статической типизации, она в php несерьезная, но это лучше чем ничего. И максимально беги от любых crm, вордпресса и кастомных фреймворков.

А на го если всё таки решишься, то рекомендую пробовать крупные конторы типа авито, где хотя бы научат бест практисам и будет какая-то более менее выстроенная архитектура. Также очень популярен озон, но чет я хз, года 3 назад они были техническим калом с дикой текучкой кадров. Маленьких контор избегай, хз чего у них там внутри, а ты скорее всего ещё слишком неопытен, чтобы детектить копролиты на этапе собеса.

Добра.
Аноним 06/09/23 Срд 00:31:56 2830473 544
>>2830470
> И максимально беги от любых crm
Тьфу, опечатался. CMS*
Аноним 06/09/23 Срд 05:49:55 2830528 545
>>2830394
Программист это ебаное дно и их работу заменяют нейросети, а девопсы это боги с гораздо большей зарплатой
Аноним 06/09/23 Срд 12:21:16 2830825 546
>>2830394
У нас в бигтитьке все девопсы что-то пишут из инструментов своих на гошке. Так что забей на макакинг этот, катись в девопсы и потом оттуда можно уже и в сисяны и в инфрастракче девелопмент и прочее.
Аноним 07/09/23 Чтв 00:06:50 2831722 547
>>2830528
1. зп у программеров больше
2. вакансий у программеров больше
3. любой программер может стать девопсом, потому что мы и так умеем конфиги писать, а вот девопсу чтобы стать программером пришлось бы долго учиться нормально программировать
Аноним 07/09/23 Чтв 05:43:52 2831797 548
>>2831722
1. Падают вниз
2. Ты категорически не прав, конкуренции на вакансию девопса - 5 человек, на любую программистическую - от 50 до 1000
3. Роль девопса не только конфиги писать
Аноним 07/09/23 Чтв 12:59:46 2832122 549
А можно ли самому управлять массивами в плане выделения новых, копирования и т.п.? Или только через слайсы такое возможно?
Аноним 07/09/23 Чтв 15:58:13 2832325 550
>>2832122
Можно, просто не используй слайсы
Аноним 07/09/23 Чтв 16:34:36 2832377 551
>>2832325
Но я не знаю как. Везде пишут только про слайсы.
Аноним 07/09/23 Чтв 16:39:53 2832385 552
>>2832377
У массива фиксированная длина. Всё.
Аноним 07/09/23 Чтв 16:40:26 2832387 553
без make у тебя массив будет
Аноним 07/09/23 Чтв 16:54:35 2832400 554
>>2832385
Дак я могу выделить массив N длины, где N будет известна во время выполнения? Если да, то как?
Аноним 07/09/23 Чтв 16:59:32 2832406 555
>>2832400
Нет, так нельзя. Пользуйся постоянной длиной массива
Аноним 07/09/23 Чтв 22:23:51 2832787 556
>>2831797
1. Нихуя, растут вверх
2. Вакансий все равно больше, при этом "конкурируют" с тобой как правило 99% вкатышей со скиллфектори и прочего скама, так что их можно игнорировать
3. Как и везде там много всего, но я занимался админством, для мозга это все равно нативнее чем программирование и переход программеры->девопсы для мозга легче чем наоборот. Не нужно учить новые паттерны мышления, просто учишь новые инструменты да и все. Не говоря уже про то, что как программер я и так и кубы настраиваю периодически, и метрики пишу и смотрю, и тд и тп, так что футуршока у программиста особо быть не должно

>>2832122
1. Используй массивы, [2]string тебе даст массив с фиксированной длиной 2 элемента. Любые операции дальше можешь писать самостоятельно (для присваивания можешь использовать стандартную copy), но с дженерик кодом тебе будет тяжко и больно, либо придется передавать все через слайсы, что мб обесценит идею. Правда [n]string делать нельзя
2. Используй container/queue или самописный аналог если слайсы не подходят и нужна очередь,стек или что-то специфичное
3. Тебе никто не мешает самому оперировать длиной слайса, make([]T, X, Y) позволяет выставить и len и capacity. Например foo := make([]T, 0, len(bar)*2); foo == append(foo, bar...) тебе даст слайсровно в два раза больше вместимости чем исходный
4. Используй []byte и сырые поинтеры, если умеешь. Но если ты задаешь такие вопросы, то скорее всего не умеешь
5. Скорее всего тебе это все не нужно, используй слайсы и не еби себе мозг. В реальной жизни у тебя практически никогда не будет задач, когда тебе реально понадобится
>>2832400
6. По гошному скорее всего будет сделать свою структуру type LimitedSlice[T any] { s []T; limit uint64} и самому реализовать для нее операции append, set, тп. и там же проверки на превышение лимита
Аноним 08/09/23 Птн 00:24:18 2832877 557
>>2832122
в новых версиях можешь сделать слайс и скастовать к массиву определенной длины, только панику не слови соколок https://go.dev/play/p/zLx99bbgGyR
Аноним 08/09/23 Птн 11:44:54 2833179 558
Можно ли стать профессионалом без IDE GoLand?
Аноним 08/09/23 Птн 14:10:20 2833319 559
>>2833179
Нет, без GoLand ты не найдешь сорс код разных либ, поэтому не сможешь стать лучше, смотря на код крутых челов
Аноним 08/09/23 Птн 15:35:45 2833434 560
>>2833319
Нах он нужен? VS code отлично справляется вообще со всем
Аноним 08/09/23 Птн 17:59:17 2833603 561
>>2833434
>VS code отлично справляется вообще со всем
Хотя бы сохранить значение выражения в переменную и подставить в местах где оно используется, VS Code уже научился?
Аноним 08/09/23 Птн 18:51:17 2833648 562
>>2833603
Понятия не имею о чём ты говоришь. Звучит какбудто ты лютый гавнокод пишешь
Аноним 08/09/23 Птн 20:46:22 2833823 563
>>2833179
Перекатился с джавы, юзаю дальше Идею, все четко
Аноним 08/09/23 Птн 23:20:14 2833960 564
>>2833648
>Понятия не имею о чём ты говоришь
Ты блядь даже бабу IDE не нюхал. Пишешь ты код
if foo.Bar() > 0 {
...
}
Потом ты понимаешь что тебе надо что-то сделать с foo.Bar(). В нормальной IDE ты делаешь introduce/extract variable и у тебя создаётся переменная с значением foo.Bar(), а там где был foo.Bar() вставляется эта переменная. Это простейший рефакторинг, даже переименование сложнее. И его нет в этой убогой VS Code.
Аноним 09/09/23 Суб 04:58:26 2834028 565
Приветствую, эксперты. Вопрос про смену стека: всю жизнь двигал кнопочки на шарпе в впф, а теперь захотелось перейти в бэк на go. Без опыта работы собственно с бэкендом попустят на собеседовании, или достаточно продемонстрировать умение прогать и наличие представления о дизайне систем?
Аноним 09/09/23 Суб 08:10:16 2834076 566
>>2834028
Лучше вначале поработать на Асп.нет или РНР годик, а потом переходить на го.
Аноним 09/09/23 Суб 11:08:07 2834232 567
>>2833960
>там где был foo.Bar() вставляется эта переменная
Добро пожаловать в мир хардкода и гавнокода. Понял, я тебя услышал.
Аноним 09/09/23 Суб 16:36:43 2834649 568
>>2830470
Если челик студент, то нужно сразу в гоху вкатываться.
Авито, яндекс, озон, вайлдберис набирают себе студентов круглогодично.
Аноним 09/09/23 Суб 17:01:52 2834678 569
Хочу перекатиться в Go/Rust, при том, что опыт коммерческий в Го у меня уже был.
Просто когда работу менял, согласился пойти в команду, где Go/Python использовали, при этом зп апнул в два раза. Но в действительности оказалось, что проект - легаси монолит на питоне, с двумя микросервисами написанными на Go сборку, которыми всего лишь один человек занимается.
Сейчас, поработав там уже с начала февраля этого, появилось уйти на другой проект. Причины просты - легаси монолит на питоне плохо поддерживается у нас.
Память течет как не в себя, в произвольные моменты времени начинают течь потоки - периодически с нихуя внезапно возникает 250к системных тредов, которые ложат машинку и ее приходится перезапускать. И куча других проблем. При этом на микросервисы распиливать монолит не особо хотят. Разговоры об этом ведутся, но каждый раз выползает скуфидон-противник микросервисов и начинает доебывать всех вопросами о том, что нам это даст и не проебемся ли с микросервисами, и почему микросервисы это плохо в его понимании.
Аноним 09/09/23 Суб 17:03:56 2834680 570
>>2834678
>Память течет как не в себя
К слову эта проблема у нас решается перезапуском.
6 раз в сутки по очереди перезапускаем каждую виртуальную машину.
Когда-то слышал, что в некоторых местах, где жирная джава крутится, перезапускают сервера раз в сутки, так вот у нас на питоне перезапускают 6 раз в сутки.
Аноним 09/09/23 Суб 19:56:40 2834956 571
>>2834678
>Python на проде
земля гавной тем даунам, кто затащил неподходящий инструмент на проект.
>Rust/go
Отлично зарекомендовали себя в вебе. А голанг это "хуяк-хуяк и в продакшен"
Аноним 09/09/23 Суб 22:18:24 2835157 572
>>2834649
> Если челик студент, то нужно сразу в гоху вкатываться.
гхм гхм
> 2) Пыха больше склонна к фрейморкам, что является большим подспорьем для новичка, есть миллион гайдов, примеров "как делать", да и в целом ты работаешь и растешь на какой-то архитектуре. В го же, наоборот, фреймворки не любят и каждый проект собирается в соответствии со взглядами конкретного лида (в лучшем случае) или девелопера (в худшем); Поэтому на пыхе тебе будет и легче, и ты приобретешь больше архитектурного опыта и знания паттернов, для новичков это очень полезно;
> 3) Го это в целом довольно примитивный язык, без негативных коннотаций, просто по факту: в языке очень мало встроенных возможностей, даже дженерики до сих пор каличные; Новичку как правило лучше набраться кругозора и потрогать/посмотреть больше вещей и здесь какие-то более богатые языки подойдут лучше. Хотя бы тайп юнионы научишься использовать, простейшую функциональщину array_map вроде ещё не запретили и прочее;
Удачи начинать с го, а потом по любой причине оказаться вовне и охуеть от непонимания, что делать с трейтами, что такое промисы, что такое observable и тд и тп. В радикальном случае такой студент гошник может не знать, что такое слои, middleware, di и прочую базу, потому что попал на особо "хардкорный" проект
Аноним 09/09/23 Суб 23:03:30 2835197 573
>>2835157
> Удачи начинать с го, а потом по любой причине оказаться вовне и охуеть от непонимания
а зачем? годик продержишься и тебя будут звать работать гошником.
>непонимания, что делать с трейтами, что такое промисы, что такое observable и тд и тп
так работа это не образование. нахуй устраиваться писать хуйню, если всё это можно в бэкграунде подтянуть? учитывая што большая часть студентов уже имеет опыт с петоном/плюсами/жавой и разобраться в этой хуйне проблем не составляет. если составляет, то сочувствую конторе, которая таких нанимает
Аноним 10/09/23 Вск 09:51:14 2835420 574
Массив вёдер в карте - это массив или слайс?
Аноним 10/09/23 Вск 11:07:43 2835449 575
>>2835420
Граф, дерево или список. Что угодно
Аноним 10/09/23 Вск 13:47:33 2835604 576
>>2835449
Почему разработчики го это всё скрыли? Даже в джаве эти конструкции открыты и можно создать свои аналоги. Создали слайсы, но программист на го не может создать свои слайсы, потому что не может управлять массивами.
Аноним 10/09/23 Вск 14:07:30 2835615 577
>>2835604
Потому что голанг это про простоту
Аноним 10/09/23 Вск 17:32:43 2835885 578
Небольшой соцопрос:
Инициализацию через init() в пакетах отличных от main выполняют гомосексуалисты или программисты?
Аноним 10/09/23 Вск 18:43:33 2835940 579
>>2835885
А что ты предлагаешь? Конфигурирование бинов в xml?
Аноним 10/09/23 Вск 19:20:09 2835958 580
>>2835885
нууу там есть юзкейсы, хотя редкие и в 99% случаев лучше сделать var globalA, globalB = initStuff(). на initStuff тесты поудобнее писать

в main это как раз максимально не нужно. в чем проблема засунуть сразу в main?
Аноним 10/09/23 Вск 22:20:08 2836202 581
>>2835940
Я ничего не предлагаю, а лишь пытаюсь выяснить делают-ли так. Часто наблюдал, что в программировании не очевидных действий стараются избегать. Инициализация всякого говна в n-пакетов ощущается не очевидно.

>>2835958
В некоторых ситуациях импорта (без инита) получаются пустые переменные и твой трюк не прокатит.
Аноним 10/09/23 Вск 22:38:38 2836227 582
image.png 93Кб, 960x797
960x797
image.png 100Кб, 896x822
896x822
Решил давеча попробовать сделать свою игру на ебитене, и я чето так и понять не могу, как мне асинхронно обрабатывать клики/ивенты?
У меня значится была задумка сделать как в юнити InputSystem. Есть ActionMap или чето такое, где мы биндим действия к клавишам и методам с асинхронными колбеками. В итоге накидал примерно такой код.
Все работает, только вот если я слишком часто нажимаю кнопки, то игра жестко фризится, а иногда даже из-за неё зависает комплюхтер, как это можно исправить?
И в принципе я чето не ебу, стоит ли лучше сделать дерево апдейтов объектов и обновлять каждый раз всех потомков, имхо, в конечном итоге это будет очень долго работать
Аноним 10/09/23 Вск 23:34:56 2836309 583
>>2836202
> В некоторых ситуациях импорта (без инита) получаются пустые переменные и твой трюк не прокатит.
не понел. оно в одно и то же должно компилироваться.
мне кажется что ты говоришь про ситуации, когда пакет вообще не импортят (например sql драйвер) и смешиваешь кейсы.
Аноним 10/09/23 Вск 23:44:18 2836315 584
>>2836309
Я про переменные окружения. Если проебаться с порядком инициализации, то получаешь баги с тяжёлой диагностикой источника. Ну если у тебя не хелло ворлд.
Аноним 11/09/23 Пнд 00:03:08 2836339 585
>>2836315
ну это уже баг. если он происходит, то явно не надо так делать, и как его решать уже твоя эксперность должна выбрать. если хочешь избежать глобальных переменных, то можно из мейна эти переменные инжектить в сущность. либо пофиксить код пакета.
из интересного, вот такая хуйня например ловится на этапе конпеляции https://go.dev/play/p/75IuKEZa3qE
Аноним 11/09/23 Пнд 09:07:34 2836538 586
>>2836339
Вот я и хочу все инициализации в одном месте делать, а результаты по пакетам разбрасывать. Т.е. сразу видно все операции и не надо по директориям лазить, чтобы что-то поправить в переменных. Вопрос в том, не говнокод-ли это?
Аноним 11/09/23 Пнд 10:47:06 2836624 587
>>2835940
>Конфигурирование бинов в xml?
Как будто, что-то плохое.
Аноним 11/09/23 Пнд 10:50:30 2836628 588
>>2834678
>Память течет как не в себя, в произвольные моменты времени начинают течь потоки - периодически с нихуя внезапно возникает 250к системных тредов, которые ложат машинку и ее приходится перезапускать.
Проблема в вашей криворукости, а не питоне. Если вы перепишите на го, ваши кривые руки не выпрямятся.
Аноним 11/09/23 Пнд 15:15:56 2836999 589
>>2836227
Судя по твоему коду это твой первый опыт. Поэтому хуярь дальше, учись писать горутины. В итоге у тебя игровой движок это как ивентлуп, нажатие кнопок выпускает событие, а обработчик это событие читает. А механизм любой
Аноним 11/09/23 Пнд 15:31:51 2837030 590
Начал вкот пару недель назад. Можете скинуть репозиторий или тутор какой нибудь с protobuf+grpc.
Все что смог найти это либо трёхлетнее гавно где половина команд уже устарела либо типичный хелловорлд где пишут только сервер и юзают постман в качестве клиента.
Хотелось бы что нибудь с 2 микросервисами и базовым обменом сообщениями между ними. И чтобы хоть какая нибудь рил-ворлд структура проекта была а не всё свалено в кучу.
Аноним 11/09/23 Пнд 16:26:53 2837145 591
>>2837030
Я такого не нашёл. В итоге пошёл изучать РНР.
Аноним 11/09/23 Пнд 17:24:33 2837248 592
Я уже знаю C++, Java, Haskell, Ocaml хуево. Как быстро ботается Go до уровня "(basic level, simple web servers)"
Аноним 11/09/23 Пнд 17:52:42 2837273 593
Аноним 11/09/23 Пнд 19:49:40 2837572 594
image.png 143Кб, 693x871
693x871
image.png 53Кб, 619x530
619x530
>>2836999
Ну это хуита, потому что разрабы написали, что вообще лучше всего использовать Update, иначе может быть плохо. В итоге я сделал дерево для процессов и для ui (LayerTree, UILayerTree) (инициализация всего этого добра пик1) и обосрался, потому что я не понимаю, что мне делать дальше. Ведь мне нужно из обработчика коллизий внезапно! обработать коллизии и вызывать событие или хотя бы сделать так, чтобы персонаж не мог дальше идти, сталкивался просто.

Я вот хз что на этом этапе делать, потому что из вариантов:
1. ивент бусси - мы даем доступ к каналу связи, ебошим что-то типа кафки на каналах, воркеры работают, обрабатывают команды и тд, но это уже звучит как мега говно
2. прокинуть нужные сервисы и вызывать что-то через них, но это нифиге не loose coupling, когда мы 25 сервисов друг с другом связываем зависимостями

И я вот хз, что мне делать вообще с этим всем.
Аноним 11/09/23 Пнд 21:39:43 2837802 595
>>2837145
Тоже сейчас на пыху перекатываться буду. По советам из /b/ выучил голанг+питон с соответствующим стеком, а работы для джуна хуй да нихуя. Если го, то обязательно 2-4 года коммерческого опыта, а на питоне только всякое говно с ботами, бустерами, парсерами. В моём миллионнике дико востребована пыха и 1с, плюсом гигакорпорации сишников с жавистами ищут, но там алгосы надо знать хорошо.
Аноним 11/09/23 Пнд 22:44:43 2837918 596
Аноним 12/09/23 Втр 01:06:41 2838144 597
>>2834678
>>2834680
Я может чего не понимаю, но как память на питоне и джаве может течь? Там же сборщики мусора
Аноним 12/09/23 Втр 05:47:44 2838225 598
>>2837572
>И я вот хз, что мне делать вообще с этим всем.
Используй готовые игровые движки не еби мозга
Аноним 12/09/23 Втр 08:12:37 2838262 599
>>2838144
Какой-нибудь динамический массив или карта держат ненужные ссылки в себе
Аноним 12/09/23 Втр 10:43:39 2838366 600
>>2838262
Понятнее не стало. Это же не течь в памяти, когда отработает сборщик, все это будет удалено
Аноним 12/09/23 Втр 12:32:24 2838447 601
>>2838366
Он никогда не отработает, потому что криворукие программисты не отпускают массив или карту. Часто ещё делают её глобальной, т.е. она будет жить, пока процесс не убьёшь.
Аноним 12/09/23 Втр 15:15:11 2838669 602
>>2838447
Можно сделать расписание ребутов с доп правилами по потреблённой памяти и проблема решена.
Аноним 12/09/23 Втр 15:38:01 2838705 603
>>2838669
Но лучше выпиздить криворуких программистов на мороз.
Аноним 12/09/23 Втр 15:43:05 2838711 604
>>2838705
Скорее тебя выпизднут на мороз вместе с предложениями многочасовых ревью. Больше ценятся люди, которые могут прикрутить костыль к вундервафле, чтобы кабаньи фичи быстрее выкатить.
Аноним 12/09/23 Втр 16:27:34 2838748 605
Переписывайте всё на Rust, не будет течь память из-за тамошней mut-ёбы
Аноним 12/09/23 Втр 19:52:07 2839017 606
>>2838144
Так же как и в го, не? Не высвободил ресурсы там, где это явно сделать предполагалось
Аноним 13/09/23 Срд 01:33:07 2839221 607
>>2740805 (OP)
А есть где-нибудь список с типичными ошибками нубисов? Немного трогал go до этого но мало, сейчас пытаюсь вкатиться полноценным гофером
Аноним 13/09/23 Срд 03:04:53 2839237 608
Аноним 13/09/23 Срд 10:08:49 2839407 609
>>2838711
Такой подход работает очень ограниченное время. Проект быстро придёт к состоянию когда вносить изменения в продукт станет сложно, долго и сопряжено кучей багов.
Аноним 13/09/23 Срд 10:09:42 2839410 610
Аноним 13/09/23 Срд 15:29:03 2839735 611
>>2839407
пакистанцы доделают
Аноним 13/09/23 Срд 16:45:54 2839854 612
Куда катиться без опыта в го, но с опытом байтоебства в плюсах? Такие шизофреники вообще кому-то интересны?
Аноним 13/09/23 Срд 17:35:11 2839907 613
>>2839854
озон/авито/яндексы. очевидно надо уметь в нетворкинг и конкарренси
Аноним 13/09/23 Срд 17:59:49 2839933 614
image.png 138Кб, 643x733
643x733
image.png 13Кб, 576x156
576x156
Скажите, за сколько часов вы бы сделали это тестовое (пикрил1)? При следующей зарплатной мотивации вакансии (пикрил2)
Я себя оцениваю на джуна го, я бы это сделал часов за 8, норм ли такое тестовое вообще?
Аноним 13/09/23 Срд 18:10:30 2839949 615
>>2839933
Хотят мидла за ЗП джуна?
Аноним 13/09/23 Срд 18:15:52 2839956 616
Аноним 13/09/23 Срд 18:20:20 2839961 617
>норм ли такое тестовое вообще
Задание норм. Но зарплата нихуя не норм. Джунов на голанге не бывает, стартовая позиция хотя бы 150-200к
Аноним 13/09/23 Срд 18:49:44 2840012 618
F5Snd43a0AAL4YA[...].jpg 255Кб, 2092x2639
2092x2639
>>2839933
ну я бы из интереса сделал, т.к. с голой кафкой и графкюелем не работал. а так да, часов за 8 можно разобраться и накатать. хотя за 100к конечно нахуй надо.
если бы это было задачкой на работе, то 2-3 рабочих дня
Аноним 13/09/23 Срд 19:49:38 2840097 619
>>2839933
откуда джун знает как с графкуелем и кафкой правильно работать, а если что и напишет, то все равно мидлу придется все чистить вилкой либо вообще переписывать
Аноним 13/09/23 Срд 20:07:55 2840120 620
Анон подскажи ньюфагу.
Как в net/http передать в функцию хендлера запроса внешний объект (который уже запущен и в фоне выполняет вычисления, вызывать его на каждый запрос не надо, надо просто периодически выводить то что было насчитано в фоне).
В питонячем aiohttp все просто. А тут сложна, сложна и нихуя не понятно.
Аноним 13/09/23 Срд 20:17:15 2840138 621
>>2840120
ну ты либо можешь хендлер сделать кложуром и захватить свою зависимость, либо воспользоваться функциями высшего порядка https://go.dev/play/p/LXu2IxkCpR_7 , либо хендлером сделать метод у объекта, у которого есть ссылка на твою зависимость
Аноним 13/09/23 Срд 20:20:28 2840148 622
>>2840138
к слову, последний варик наиболее традиционный для реальных сервисов.
у нас под каждый хендлер заводится свой тип с методом Handle, в который через конструктор New передаются зависимости.
Аноним 13/09/23 Срд 21:01:22 2840213 623
>>2840138
Но ведь замыкания - это не решение проблемы, а просто перенос её в другое место. Замыкания берут объект не явно из скоупа более высокого уровня, только в данном случае этими неявными будут w и r, а уже искомый объект будет явно. В таком случае с точки зрения концепта это ничем не отличается от не передавать объект ваще = он будет доступен через скоуп общего уровня. Так даже лучше, ибо неявно будет передаваться 1, а не 2 объекта.
>>2840148
Спасибо за совет. Так и сделаю.
Аноним 13/09/23 Срд 22:08:37 2840302 624
>>2839933
Кажется амбициозно за 8 часов, я бы 24 закладывал, хоть и миддл. Ладно, если бы у тебя был готовый шаблон со всей обвязкой.
Аноним 14/09/23 Чтв 08:29:14 2840582 625
Короче, есть реальная возможность вкатиться на стажёра гошника через контору в которой я работаю ща (мне так сказали в конторе что к своим хэары больше присматриваются) в кал-центре. И типа были даже случаи подобные множество.

Подскажите какие курсы/книги читать? есть какой-нибудь гайд?

Из релевантного - когда-то давно учил джаву/спринг стек, делал небольшие пет проектики. Шаблоны/алгоритмы почти не трогал, но в принципе понимаю как это подтянуть.

Есть какой-нибудь гайд?
Аноним 14/09/23 Чтв 15:02:53 2841064 626
Аноним 14/09/23 Чтв 15:15:23 2841078 627
Пиздец, смотрю всякие конференции, доклады, презентации от впараши/газона/шмяндекса и 90% контента это вода ебаная.
Половину видоса рекламят свои помойные параши вторую половину рекламят свои курсы, а между этим говорят "мы вот самые быстрые юзаем хттп3, Квик, по нескольку тсп коннекшенов на загрузку файлов, у нас сдн по всей России", но ебаная закешированная страница ВК грузится 20 секунд, на Яндекс маркете каждый товар в выдаче подгружается как картинки по диалапу в 90х.
Причем я не на каком то дальнем востоке или Урале и всякие гуглы/амазоны/фейсбуки грузятся мгновенно. Почему так нахуй.
Аноним 14/09/23 Чтв 19:32:49 2841516 628
>>2841078
Это ты самую суть айтишного наебизнеса ухватил
>говорят "мы вот самые быстрые"
Так и ты говори
Аноним 15/09/23 Птн 11:11:02 2842041 629
>>2841078
>рекламят свои помойные параши
Малыш наконец понял для чего компаниям нужны конференции?
Аноним 15/09/23 Птн 23:18:01 2843301 630
>>2839907
>нетворкинг
Не обязательно. В яндексе есть NOCDEV, который на го пишет, но это не единственные гошники в яше.
А вот конкарренси обязательно.
Аноним 16/09/23 Суб 00:08:02 2843378 631
>>2841078
>Причем я не на каком то дальнем востоке или Урале и всякие гуглы/амазоны/фейсбуки грузятся мгновенно. Почему так нахуй.
У Гугла все очень хардкорно по веб морде, там чистый С++ с упором на оптимизацию перформанса. Дальше сервисы, там самые употребимые тоже стараются располагаться как можно ближе, куча метрик на перформанс с алертами на его проседание, автоматическое масштабирование сервисов при росте нагрузки. Там понимают насколько важен быстрый отклик. Не можешь быстро вернуть данные - быстро покажи пользователю, что запрос обрабатывается.

А у Амазона инфраструктура говно, у меня видео с amazon.de постоянно подвисает на предзагрузке. Это при том, что я в .de и канал норм.
Аноним 16/09/23 Суб 14:15:15 2843884 632
аноны, есть кто проходил курс Яндекс Практикума Продвинутый ГО стоит ли записаться? или есть альтернатива получше?
Аноним 16/09/23 Суб 14:27:49 2843911 633
>>2843884
У них в бесплатном курсе для Го одна вода. Вместо объяснения тем просто дают ссылки на статьи. На весь курс только пара сниппетов с кодом по типу хелловорлд. Ебаную дефолтную документацию не смогли нормально в курс оформить, сомневаюсь что в Продвинутом курсе что то по другому. Просто инфоцыгане.
Аноним 16/09/23 Суб 16:43:28 2844095 634
>>2843911
Вот я взялся изучать го 3 дня назад.
Смотрю видосы, делаю серваки по мануалам, но у меня куча вопросов, типо что такое этот writer, что внутри request, как там под капотом происходит принятие/отправка реквеста, насколько оно вообще многопоточно само по себе. Вот могу я просто хэндлеры кидать в горутину? Что с ними вообще делать там можно. И никто это не обсуждает. Все этим просто пользуются.
Только самому сидеть ковырять или где то есть разбор таких вещей?
Аноним 16/09/23 Суб 16:53:02 2844105 635
>>2844095
Я тоже помаялся 2 месяца так и ушёл учить РНР, где куча учебных материалов и всё расжёвано.
Аноним 16/09/23 Суб 16:57:42 2844113 636
>>2844105
Меня не столько пугает отсутствие материалов, сколько что всем пофиг на это.
Как сделать то-то? Делай вот так.
Почему именно так? ...
Нет ли в работе такой хуйни, что все просто повторяют заклинания по созданию веб сервисов без понятия что реально происходит внутри?
Аноним 16/09/23 Суб 17:40:48 2844198 637
>>2844095
>что такое этот writer
интерфейс
>что внутри request
>насколько оно вообще многопоточно само по себе
>Вот могу я просто хэндлеры кидать в горутину? Что с ними вообще делать там можно
заходишь в Jetbrains GoLand -> пишешь хендлер -> go to declaration or implementation, смотришь сорсы
Аноним 16/09/23 Суб 18:10:33 2844262 638
>>2844105
Всё правильно сделал. Сервисы на голанке это сборная солянка из гавна и макарон всегда. Нет НИ ЕДИНОГО хорошего фреймворка, как yii Или laravel
Аноним 17/09/23 Вск 01:27:02 2844784 639
>>2844113
Какую-то хуиту ты сейчас написал. В стандартной библиотеке все максимально следует стандартам и нет никакой магии совсем. Просто берешь сорсы и читаешь. Специально язык такой сделали, чтобы читалось легко.
Аноним 18/09/23 Пнд 08:31:56 2846128 640
>>2844784
>В стандартной библиотеке все максимально следует стандартам и нет никакой магии совсем.
Стандартная библиотека написана, в зависимости от того под чем сидел разработчик. В стандартной библиотеке 2 функции сортировки слайсов, у одной функция сравнения возвращает bool у другой int. Почему? Пошёл нахуй, вот почему! А та которая с bool имеет функцию StableSort. Как реализовать StableSort имея только функцию сравнения <=? Лучше тебе не знать сынок.
Аноним 18/09/23 Пнд 10:02:21 2846216 641
>>2846128
> <=
Так с помощью этой операции можно вывести любую другую.
Аноним 18/09/23 Пнд 16:43:46 2846692 642
>>2846216
>Так с помощью этой операции можно вывести любую другую.
И увеличить количество сравнений в 2 раза. Ахуенно!

Ну и в целом охуенные решения типа
type Interface interface
Тут И нейминг от бога и сама концепция. В нормальном языке, ты у типа реализуешь функцию compare() а дальше просто передашь массив/список этого типа в функцию sort()/max()/min(). Но это конечно же не говей. Говей это создать тип для слайса, запиздячить туда функцию сравнения и базовые операции для слайсов. Вот тогда то его и можно будет отсортировать.
Аноним 18/09/23 Пнд 17:57:31 2846815 643
>>2846692
В целом согласен. Удобных структур для повседневного использования не хватает. Писать на каждый массив len less и тд не прикольно.
Аноним 19/09/23 Втр 00:55:45 2847435 644
>>2846128
>>2844113
Потом такой вот крикун приходит и убеждает всех что вышка нинужна
Аноним 19/09/23 Втр 09:13:55 2847517 645
>>2847435
Это посты разных людей
и вышка у меня есть
Аноним 19/09/23 Втр 09:56:12 2847560 646
>>2847435
У меня есть вышка на погромиста, но я всё равно не понимаю где брать инфу по го. Вот все дают ссылки только на базовый синтаксис, а как писать полноценные веб-приложения - такого уже нет. А между тем там очень много вопросов: от архитектуры до инструментария.
Аноним 19/09/23 Втр 10:43:52 2847583 647
>>2847560
Вся суть """вышки""" программиста. Не позорился бы, вкатун. Любой курсовичок после 9го класса знает инструмент и технологию лучше тебя
Аноним 19/09/23 Втр 10:52:28 2847589 648
>>2847583
Курсовичок знает только в пределах изучаемого на курсе. или по какой причине их никуда не берут?
Аноним 19/09/23 Втр 11:11:24 2847609 649
>>2847589
>или по какой причине их никуда не берут?
Потому что с 2014го года дефицит программист сходит на нет, сейчас 95% работающих программистов - имеют стаж больше 5 лет. 5% это те, у кого меньше 5 лет.

Нет НИ ОДНОЙ причины нанимать каких-то джунов, стажёров, это всё великое наебательство. Если ты вкатился до 2018го, то ок, можешь осваивать дальше профессию. если ты вкатился во времена ковидного хайпа - то будет смещён с пьедестала более старыми игроками на рынке
Аноним 19/09/23 Втр 11:16:40 2847625 650
>>2847609
А как прыгнуть на новый язык сразу на мидла?
Аноним 19/09/23 Втр 11:40:20 2847666 651
>>2847625
Быть мидлом-сеньором на текущем и выполнять те же самые обязанности
Аноним 19/09/23 Втр 12:44:52 2847730 652
>>2847609
Я постоянно слышу обратное и что новых программистов набирают. Правда не на го, а на другие более ходовые языки типа джавы и РНР. Го действительно самый худший вариант для вката. Ну может хуже ещё раст какой-нибудь.
Аноним 19/09/23 Втр 20:35:48 2848313 653
>>2839933
>8 часов
Ты уже явно не джун. Я его 4 дня делал. День писал базу, день на отладку и два дня на тестирование.
Аноним 19/09/23 Втр 21:02:54 2848358 654
>>2848313
>Я его 4 дня делал
А зачем?
>День писал базу
А что там за проблема с базой, там одна таблица с фио, возрастом, полом и национальностью
Аноним 19/09/23 Втр 21:06:44 2848364 655
>>2848358
Базой я называю всю реализацию, которую на следующий день люто дебажил.
>нахуя
До этого задания я знал только один фреймворк и как его тестировать. Это был стимул прокачаться по знаниям.
Аноним 19/09/23 Втр 22:42:38 2848438 656
>>2847435
>Потом такой вот крикун приходит и убеждает всех что вышка нинужна
Или проспись, алкаш. >>2846128 вообще не про вышку.
Аноним 20/09/23 Срд 18:31:10 2849367 657
https://go.dev/blog/loopvar-preview

Продолжаем подчищать за лысым дебилом его дебильные косяки, глядишь ещё лет через 10 можно будет писать на сабже и не испытывать испанский стыд.

алсо тредик сейчас утонет
Аноним 20/09/23 Срд 22:04:59 2849647 658
>>2847609
>Нет НИ ОДНОЙ причины нанимать каких-то джунов, стажёров
нуу им можно платить меньше. работают так же, как выгоревшие сеньоры
>Если ты вкатился до 2018го, то ок, можешь осваивать дальше профессию. если ты вкатился во времена ковидного хайпа - то будет смещён с пьедестала более старыми игроками на рынке
я за пару месяцев до локдаунов в 2020 вкатился, сразу в гошку без опыта. увольнять будут? рекрутеры пока сами пишут. за жизнь только по трём вакухам сам написал, когда искал первое место
Аноним 20/09/23 Срд 22:05:00 2849648 659
Комплиятор гохи поддерживает авто векторизацию как llvm?
Есть ли какие-то слухи о переводе го на llvm?
Аноним 20/09/23 Срд 22:31:38 2849660 660
>>2849648
что такое авто векторизация 😮
Аноним 20/09/23 Срд 22:33:44 2849664 661
Аноним 20/09/23 Срд 22:36:18 2849666 662
>>2849648
Судя по беглому Гуглу нет.
В целом не удивительно.
патчи сам
Аноним 20/09/23 Срд 23:10:35 2849687 663
>>2849647
>нуу им можно платить меньше. работают так же, как выгоревшие сеньоры
Нет. Даже выгоревшие сеньоры, понимают что нельзя делать
res, _ := someFunc(...) // no error should happen
потому что он обязательно случится, хоть бы ты 100500 раз проверил аргументы функции. И куча другого говна, которого они наелись за свою карьеру. Сенька не пишет код в N раз больше джуна, он больше думает о последствиях. Чтобы не ёбнуло на проде, а если ёбнет, то хотя бы найти концы в логах. Он понимает, что работа это не про клин код, а про фичи для заказчика, но ты потом это говно поддерживать будешь. Поэтому надо и баланс соблюсти. Что пусть вы 100% договорились с другой командой про сроки и АПИ, но контролировать все равно надо.
Аноним 21/09/23 Чтв 11:17:44 2849966 664
Вот пишут, что го всегда передаёт параметры функций по значению, но тут же говорят, что срезы и карты ведут себя по другому. Почему разработчики не унифицировали все типы, чтобы они передавались по значению. К чему эти исключения?
Аноним 21/09/23 Чтв 11:22:33 2849971 665
>>2849966
Потому что гошка пока сыровата. Ты ещё охуеешь от вложенных структур, которые мигом могут изменить поведение массивов.
Аноним 21/09/23 Чтв 11:34:24 2849987 666
>>2849966
Двачую, пока чат гопота этого не сказала сам бы не заметил. Почему так криво сделано она не объяснила.
Аноним 21/09/23 Чтв 12:55:30 2850102 667
>>2849966
Строго говоря, тут нет противоречия. В го действительно все передается по значению, в том числе и мапы/слайсы.
Ведут же они себя так, потому что они содержат указатель внутри себя.
Если ты сделаешь что-то вроде https://go.dev/play/p/sm3e0nhrfnz то ВНЕЗАПНО встретишь такое же поведение, несмотря на передачу "по значению".

Сделано же так для того, чтобы избегать "лишних" копирований, так как мапы и слайсы зачастую бывают очень большими, то копировать их 100500 раз между всеми функциями будет очень накладно. В серьезной разгработке на го обычные структуры с большим количеством полей тоже начинают по указателю передавать, чтобы избегать копирований.
Аноним 21/09/23 Чтв 12:57:33 2850109 668
>>2850102
С картой разобрался, но срез - это вообще пиздец. Они создали такую структуру, чтобы пользоваться ей адекватно, необходимо прям ковыряться в её кишочках. Да зачем было её инкапсулировать, если без знания кишочков, я не могу ей пользоваться?
Аноним 21/09/23 Чтв 14:48:38 2850264 669
>>2850102
В реальных проектах такую хуйню вытворяют или это задачка с литкода? Просто выглядит максимально, ну ты понел.
Аноним 21/09/23 Чтв 15:02:50 2850282 670
>>2850102
Почему s тоже поменялась? Она же ни как не связана со структурой!
Аноним 21/09/23 Чтв 15:55:12 2850380 671
>>2850282
Потому что структура сохраняет птр. И при копировании скопировалась не строка, а птр на строку
Аноним 21/09/23 Чтв 16:37:19 2850438 672
>>2850380
Всё равно не понимаю.
Вот допустим у нас:
s -> "foo"
f -> struct {
S -> ptr -> "foo"
}
Далее поменяли "foo" на "bar" в f и должно получится, что
s -> "foo"
f -> struct {
S -> ptr -> "bar"
}
Но почему у нас s поменялась? Эта переменная вообще на стеке лежит и указывает на строковый литерал.
Аноним 21/09/23 Чтв 16:41:07 2850444 673
>>2850438
S и s это физически одна область памяти.
Аноним 21/09/23 Чтв 16:44:45 2850449 674
>>2850444
Получается можно перезаписывать даже строки, которые неизменяемые?
Аноним 21/09/23 Чтв 16:47:57 2850452 675
>>2850449
У констант нет адреса.
Аноним 21/09/23 Чтв 16:50:53 2850456 676
>>2850452
А можно посмотреть ассемблерную мнемонику этого примера?
Аноним 21/09/23 Чтв 17:39:55 2850537 677
>>2850456
Причем тут ассемблер, тебе компилятор не даст взять адрес у константы.
Аноним 21/09/23 Чтв 17:51:46 2850552 678
>>2850438
Почитай про указатели, чел.

> на стеке
Нет, компилятор сделает эскейп анализис и выделит память в куче, тому що лайфсайкл выходит за пределы тела функции. Ну конкретно в этом примере не выходит, лол, но нутыпонел.

>>2850449
Ты меняешь значение переменной, а не строку.

вообще наверни рича хикки про идентити вс валюе, познай дзен и навсегда забей на байтоебство
Аноним 21/09/23 Чтв 18:49:59 2850659 679
image.png 90Кб, 762x521
762x521
Уважаемый анончик, объясни пожалуйста, почему они говорят прописывать PATH в ~/.profile, а не в ~/.bashrc?
Аноним 21/09/23 Чтв 19:17:23 2850697 680
>>2850552
До этого примера, я считал, что хорошо понимаю указатели. Есть опыт на сишке и ассемблере. Но здесь явно какая-то неочевидная магия в голанге.
Аноним 21/09/23 Чтв 19:25:25 2850712 681
>>2850697
Их так никто не использует, имхо. Погружать адресацию глубже одного уровня это извращение какое-то. Дебажить потом будет тот же умник, который эту хуету написал.
Аноним 21/09/23 Чтв 19:44:13 2850739 682
>>2850697
Нет тут никакой магии, проблема в твоём понимании указателей.

>>2850712
Там в примере один уровень адресации (вот как раз в сишке указатели на указатели указателей - обычная история)
Аноним 21/09/23 Чтв 19:46:08 2850742 683
>>2850659
Потому что дот-профайл предназначен для хранения переменных среды. У меня вот например zsh основной шелл, смекаешь
Аноним 21/09/23 Чтв 19:46:22 2850743 684
>>2850659
1. это просто файл который большинство оболочек читают по дефолту, максимально оболочконезависимый. есть всякие .bash_profile/.zprofile и т.п., но чтобы не дублировать всякую хуйню, можно либо их не заводить (баш например .profile тогда будет по дефолту читать), либо тупо сорсить .profile из них.
2. rc файлы могут не загружаться при логине, если их явно из profile не засорсить. т.е. в общем случае все переменные, которые ты ставишь в rc, доступны только в интерактивных сессиях -
например, когда ты явно открыл терминал и там запустил программу (т.е. если ты просто запустил бинарник или скрипт, то он их не увидит). профайл файлы (.profile/.bash_profile/.zprofile) исполняются при логине и переменные доступны всем программам.
Аноним 21/09/23 Чтв 20:20:43 2850781 685
image.png 28Кб, 655x310
655x310
>>2850743
>rc файлы могут не загружаться при логине
Анончик, помоги, я вот эту таблицу составлял по баш-документации. Но похоже я что-то не так понял. Вот ты говоришь, что
>rc файлы могут не загружаться при логине, если их явно из profile не засорсить
Есть такое. Но с другой стороны, когда у нас обычное окно терминала, (== non-login interactive), логина же нету, т.е. ~/.profile не должен загружаться получается?
Аноним 21/09/23 Чтв 20:47:07 2850810 686
>>2850781
> , т.е. ~/.profile не должен загружаться получается?
сам файл не должен. но переменные наследуются от родительского процесса. когда ты логинишься, запускается логин шелл, читает .profile и потом спавнит другие процессы, которые наследуют установленные переменные.
Аноним 21/09/23 Чтв 20:52:40 2850818 687
>>2850810
Вот я изначально так и думал, просто сколько читал нигде такого пояснения не встретил.
Спасибо тебе анон.
Аноним 21/09/23 Чтв 21:41:18 2850899 688
>>2850109
про кишочки спросят на собеседовании энивей, так что знать надо
Аноним 21/09/23 Чтв 21:57:31 2850925 689
>>2850109
А что именно по-твоему в абстракции течёт?
Аноним 21/09/23 Чтв 22:39:13 2850986 690
>>2850109
Не совсем так, прям ковыряться в них не обязательно. Ты должен знать базовые правила:
Если ты пытаешься менять значения слайса, то помнишь, что значение поменяется везде;
Если ты что-то в него добавляешь, то возвращаешь его по аналогии с функцией append;
Если делаешь append, то всегда только в виде X = append(X, ...) и никак иначе.
Соблюдай их и всё будет just fine.
Я согласен, что можно было сделать чуть удобнее, например прикол с тем, что append может вернуть тебе старый слайс, а может как бы новый мне не очень нравится и я бы сделал по другому. Но в целом ты просто привыкаешь к трем правилам и становится норм, в реальной разработке об этом даже не задумываешься.
С мапами же все сильно проще, так как у них нет хитровыебанного append'а.

>>2850264
Ну тут ничего сложно тащемта нет, изич. Если ты когда-нибудь писал на плюсах то вопросов вообще 0.
Конкретно так, как это сделал я - обычно оно не используется, это был просто пример. Хотя сами указатели и фигня с тем, что структура передается с указателем внутри передается "по значению" - это очень популярная история.

Даже давай так скажу, указатели встречаются регулярно, но в целом изменение чего либо по указателю это антипаттерн и используется нечасто, кроме ресиверов у структур (всякие методы типы `func (s
S) Set(value string)`) и работой с пакетами типа sql или json (им как раз нужно указатели передавать). Поэтому так просто не делают и проблем с этим нет. 90% использования указателей это или оптимизация для того, чтобы не копировать жирную структуру лишний раз в новый скоуп, или как способ сказать, что переменная опциональная/nullable.

>>2850438
Тебе действительно нужно почитать про указатели. Это переменная и она действительно лежит на стеке, но при этом тк она это указатель, то в качестве своего значения она содержит адрес другой переменной, которая уже будет в куче. И сделав `*f.S = "bar"` я прошел по этому адресу и поменял значение той, другой перменной из кучи. Сравни https://go.dev/play/p/sm3e0nhrfnz и https://go.dev/play/p/FOIuo62RCCs , разница должна быть очевидна.

>>2850456
const a string = "blabla"
println(&a) // свалится с ошибкой компиляции
Аноним 21/09/23 Чтв 22:41:27 2850987 691
>>2850986
Бля сраный двач не умеет в поинтед списки и я проебал форматирование. Вроде кроме `func (s *S) Set(value string)` ничего не поломалось.
\
Аноним 21/09/23 Чтв 22:47:59 2850995 692
Аноним 22/09/23 Птн 03:08:52 2851081 693
Ребят подскажите, а то я туплю есть ли какой способ вызвать дженерик функцию с правильным типом.
Внутри функции без дженерика, которая принимает произвольной Obj any указатель на структуру с данными

func (db *DB) Select(obj any) {

NewQuery[Type obj - ???](db, obj)
return
}
Аноним 22/09/23 Птн 08:51:14 2851130 694
>>2851081
конечно есть. делаешь тайп ассершн и передаешь свой тип. ну или учишь свою женерик функцию работать с any
Аноним 22/09/23 Птн 08:52:19 2851134 695
Аноним 22/09/23 Птн 15:09:49 2851448 696
Что мотивирует вас при локальной разработке использовать gopath? Я понимаю, если у вас дев докер, или в продакшене это где-то может быть нужно.
Но почему вы не используете gomodule?
Аноним 22/09/23 Птн 15:35:33 2851478 697
>>2851448
я только вкатунов видел, которые по старой инфе из книг учатся. откуда информация, что кто-то модули не использует?

я настраиваю гопатх чтобы делать go mod init без названия модуля, тогда оно само из названий папочек всё подхватывает. у меня GOPATH=~/.local/share/go и ~/.local/share/go/src это симлинк к ~/src
Аноним 22/09/23 Птн 21:55:56 2851927 698
>>2849367
>Продолжаем подчищать за лысым дебилом его дебильные косяки
Расслабь булки фембойчик. Просто ряд разрабов не понимают как работают замыкания. C# в свое время тоже менял семантику https://habr.com/ru/articles/141270/ . Java изначально сказала, что замыкания только на final переменные. В Говноленге нет final, так что идут по пути Шарпа.
Аноним 22/09/23 Птн 23:10:37 2851982 699
>>2740805 (OP)
Привет, двач

Возник вопрос с пагинацией:
Как ее реализовать на го базовыми методами (без горма и прочего)
Как я понял хорошая практика реализовывать это не через лимит оффсет а сравнением столбцов типа:
SELECT * FROM mytable WHERE (created_at, id) < ('2023-09-22' :: timestamp, '228')
ORDER BY created_at, id
LIMIT 3;

Какую хорошую практику использовать, чтобы доставать значения для сравнения? Где их хранить? Типа < даты и меньше id.
Аноним 22/09/23 Птн 23:27:08 2851999 700
>>2851982
Но ведь тогда ты завязан на сортировке в репозитории.
А что если на фронте комбобокс с сортировками по имени будет?
Чем плох оффсет?
Аноним 22/09/23 Птн 23:30:49 2852002 701
>>2851982
Твою, так как более производительная реализация. Оффсет говнопрактис в определённом контексте.
Аноним 22/09/23 Птн 23:45:19 2852017 702
>>2852002
Так а откуда мне взять прошлые значения для параметров created_at и id?
Для первого запроса понятно, а если допустим будет страница номер 10, с чем мне сравнивать столбцы как добыть параметры предыдущей страницы?
Спасибо за ответ
Аноним 22/09/23 Птн 23:47:37 2852019 703
>>2851999
Ну я ознакомился с мением в авторитетном источнике в интернетах, что для высокой нагрузки оффсет хуйня потому что при большом количестве записей последние страницы будут ворочаться еле еле.
Аноним 22/09/23 Птн 23:54:54 2852024 704
>>2852019
> при большом количестве записей последние страницы будут ворочаться еле еле.
Это да. Но разве поиск строк по индексам не должен помочь?
Не Seq Scan имею ввиду
Аноним 23/09/23 Суб 00:18:55 2852038 705
>>2851982
а что за юзкейс где у тебя оффсет на гигабайты?
Аноним 23/09/23 Суб 00:28:57 2852045 706
image.png 38Кб, 678x660
678x660
>>2852038
База постгрес на ~ 1 лям записей
Везде в интернетах пишут что хуйня идея делать оффсетами.
Аноним 23/09/23 Суб 02:18:35 2852064 707
Снимок экрана 2[...].png 104Кб, 876x830
876x830
А где? Помню был еще и русский
Аноним 23/09/23 Суб 03:14:57 2852074 708
>>2851999
>>2852024
Чел правильно сомневается, это известная ловушка при работе с большими таблицами. Суть в том, что для того, чтобы получить твои строки с неким оффсетом, тебе логично нужно все остортировать и прочитать все строки перед твоими, потому что ты заранее не знаешь, что скипать а что нет, особенно в случае каких-то сложных сортировок.
Поэтому любоая реляционная бд начинает тормозить при больших оффсетах и никакие индексы здесь не помогают.
Именно поэтому гугл и прочие стали page token'ы, которые по сутия вляются айдишником последнего просмотренного тобой элемента.

Соответственно именно так эта задача и решается, если представим, что у тебя последовательные числовые айдишники ака сериал, то если ты вернул последним айдишник 100500, то в следующем запросе делаешь select * from blabla where id > 100500 order by blabla limit blabla и базе вообще не нужно заморачиваться и выстраивать "лишние" строки перед твоими, она сразу берет только нужные и работает уже только с ними.

Отвечая на изнчаальный вопрос >>2851982
>>2852017
Если у тебя айдишники числовые, то они по определению упорядоченные и таймстампы тебе для этой задачи не нужны, можешь прям с фронта (ну или чего у тебя там) получать в качестве page token айдишник последней записи и все. Хранить эту хуйню нигде не нужно, просто возвращая фронту набор строк отдельной переменной верни ему айдишник последней и пусть фронт присылает тебе его сам при следующем запросе.
Сложнее будет если у тебя там uuid. По идее они тоже бывают с гарантией порядка, но если нет - то тогда используй только uuid, просто перед основным запросом отдельно ходи в базу, доставай по pk нужную строку и доставай из неё свой created_at, ну и уже сравнивай как сейчас делаешь.

Соответственно
> Так а откуда мне взять прошлые значения для параметров created_at и id?
фронт тебе сам должен их передавать, если он запрашивает эти страницы постранично. То есть по дефолту там ничего, после первого же запроса ты вернешь первую страницу и данные для второй, потом он запросит вторую и ты вернешь ему её и данные для третьей и тп.

> Для первого запроса понятно, а если допустим будет страница номер 10, с чем мне сравнивать столбцы как добыть параметры предыдущей страницы?
Просто "от балды" с таким подходом в рандомную страницу не ткнуть, это верно. Ограничения подхода, ничего не поделаешь. Есть техники вида по быстрому взять итератор в базе, пробежать и выписать себе айдишники 1,5,10,20,50 и тп страниц и вернуть их пользователю но это ну такое.

Но кстати если у тебя это пет проект или тестовое задание, то тебе скорее всего нахуй не нужно заморачиваться с этим. Бери оффсет и не парься.
Я программирую уже почти 10 лет сейчас в финтехе где у меня ~лярд строк в некоторых таблицах и почти никогда такие оффсеты не бывают нужны, чтобы такое городить. Пользователям обычно не нужны n-тысячные страницы.
Аноним 23/09/23 Суб 04:37:58 2852078 709
>>2852074
Большое спасибо за ответ!
Аноним 23/09/23 Суб 08:27:54 2852096 710
>>2852064
Первый язык программиста это английский. Без устного английского тут делать нехуй абсолютно
Аноним 23/09/23 Суб 08:39:00 2852098 711
>>2852096
Школьного английского хватает почти на всю доку любого языка.
Аноним 23/09/23 Суб 09:18:31 2852114 712
>>2852098
А на дейликах как общаться?
Аноним 23/09/23 Суб 09:26:19 2852119 713
Аноним 23/09/23 Суб 09:57:11 2852131 714
>>2851927
Замыкания как работали, так и работают, их семантика не поменялась. Ты хоть текст по ссылке прочитай.

И это не единичное изменение - буквально все усилия команды разработки после взлёта сабжа направлены на исправление косяков лысого дебила, о которых буквально каждый говорил ему ч самого начала.
Аноним 23/09/23 Суб 10:04:34 2852138 715
>>2852119
Ну смотри сам, работы программистом осталось на пару лет. Деньги на мифическое айти будет только в зарубежье. С русским языком ты никому не нужен будешь
Аноним 23/09/23 Суб 15:27:31 2852427 716
Screenshot from[...].png 17Кб, 640x180
640x180
Screenshot from[...].png 100Кб, 813x982
813x982
Sup, /b/ /pr/.
Есть вопрос по тестам. Как тестировать хэндлер у которого есть id в ссылке?
Типа ссылка:порт/апи/id
Вроде тестирую как описано в гайдах, однако возвращает ошибку что неверный id параметр)

Получается путь такой:
Из ссылки берется id через context.Param и конвертится в int и далее этот инт передается и далее удаляется из базы запись по id.
Кроме id никаких вводных параметров нет. Код тестов:
Вывод консоли:

Буду благодарен за любой ответ!
Аноним 23/09/23 Суб 15:47:14 2852448 717
>>2852427
Я сам понимаю что я где- то должен передавать id параметр для теста хэндлера, но не пойму где
Аноним 23/09/23 Суб 15:55:10 2852457 718
>>2852064
Видимо отGoйдирован
Аноним 23/09/23 Суб 15:55:20 2852458 719
>>2852427
зачем ты в NewRequest передаешь /:id вместо /123?
Аноним 23/09/23 Суб 16:01:26 2852465 720
>>2852427
плюс у тебя настройка экспектейшнов нигде не вызывается
Аноним 23/09/23 Суб 16:02:05 2852466 721
Screenshot from[...].png 99Кб, 766x990
766x990
Screenshot from[...].png 33Кб, 766x224
766x224
>>2852465
Теперь просто ловит панику
Аноним 23/09/23 Суб 16:02:54 2852467 722
>>2852465
В смысле не вызывается, я же делаю assert того что получил и того что хочу
Аноним 23/09/23 Суб 16:05:44 2852471 723
Мне кто-нибудь объяснит, нахуя нужны моки, хуеки, стабы, если можно просто фейко репо/сервис подсунуть, ведь все нормальные люди используют DI
Аноним 23/09/23 Суб 16:06:56 2852476 724
>>2852467
tt.mockBehavior не вызвается.
NewRequest нужно с валидным хостом/портом/схемой вызывать.
Аноним 23/09/23 Суб 16:07:49 2852480 725
>>2852471
>зачем нужны ботинки, если на ноги можно надеть обувь?
Аноним 23/09/23 Суб 16:11:50 2852484 726
>>2852480
Ладно, не то написал, нахуя нужны мок, стаб фреймворки/либы, в которых нужно дополнительно разбираться, если можно самому заглушку простую сделать?
Аноним 23/09/23 Суб 16:18:01 2852491 727
>>2852484
унифицирует код. иначе приходишь и у тебя от пакета к пакету разные ручные моки, с которыми нужно разбираться. у некоторых будут всякие returnErrorOnMethodSaveStuff bool, у других будут кложуры под методы задаваться или будут разные конструкторы, напилят там фанкшнал опций и всякой другой хуйни. а так разберешься с парой фреймворков и всё везде одинаково. ну и экономит время на написание, когда освоишься - сгенерировал и осталось экспектейшны написать.

хотя если что-то мокается мапой с одним методом и мапа понятнее выглядит в тестовой таблице, то можно и ручной мок написать.
Аноним 23/09/23 Суб 16:49:09 2852506 728
Screenshot from[...].png 104Кб, 675x1038
675x1038
>>2852476
Теперь вызывается,
Однако в консоли пишет что:
expected call at /handlers_test.go:107 doesn't match the argument at index 0.
Got: 1
Want: is equal to 1
Аноним 23/09/23 Суб 17:15:08 2852537 729
>>2852484
Удачи со своей заглушкой каждый раз программировать хуйню типа
"ожидай 3 вызова метода foo(a,b,c) и чтобы a>10, b="bbb", c = false, а потом не больше одного вызова метода bar()"
Чем дольше сижу на программаче тем больше вопросов, сидит ли здесь кто-то кроме меня и совсем уж джунов
Аноним 23/09/23 Суб 17:17:36 2852541 730
>>2852537
>ожидай 3 вызова метода foo(a,b,c) и чтобы a>10, b="bbb", c = false
скорее "ожидай AnyTimes() вызова метода foo(gomock.Any(), gomock.Any(), gomock.Any())"
Аноним 23/09/23 Суб 17:20:44 2852546 731
>>2852506
ну так это ты уже сам можешь раздебажить спойлер:подозреваю, что типы разные
Аноним 23/09/23 Суб 17:27:40 2852558 732
>>2740805 (OP)
Парни, как вы относитесь к тестировщикам?
Это ИТ специалисты или просто макаки тыкающие кнопки?
Аноним 23/09/23 Суб 17:37:45 2852569 733
>>2852537
Дежурно напоминаю, что тестировать внутреннюю реализацию ненужно и вредно. Но если платят за количество написанных строк, то норм.
Аноним 23/09/23 Суб 17:42:15 2852574 734
>>2852569
т.е. ничего кроме е2е тестов не нужно
Аноним 23/09/23 Суб 17:45:34 2852579 735
>>2852537
Подскажи плз, а вот эти моки == юнит тестам? Или это про разное?
Аноним 23/09/23 Суб 17:59:43 2852598 736
>>2852579
Юнит тесты это юнит тесты.
Моки это инструмент (один из) для юнит тестов
Аноним 23/09/23 Суб 18:01:00 2852602 737
>>2852579
моки могут и в юнит-тестах и в интеграционных использоваться.

в юнит-тестах они могут как мокать внешние зависимости вроде БД (т.о. интеграционный тесты превращаются в юнит-тесты) или внешние сервисы (обычно мокается твоя внутренняя обертка к апихе), так и внутренние зависимости - всякие другие пакеты того же проекта (т.о. юнит-тесты получаются более изолированные и простые).
в интеграционных тестах моками заменяют совсем внешние зависимости, которые независимо от тебя могут поменяться/упасть - т.е. внешние сервисы, но не БД твоего сервиса. в отличие от юнитов, тут моки уже могут подниматься отдельно, например https://hoverfly.io/ , и к ним идёт реальное обращение по сети.
Аноним 23/09/23 Суб 18:07:15 2852617 738
>>2852602
>в интеграционных тестах моками заменяют совсем внешние зависимости
Имеет ли смысл тогда тестировщикам писать интеграционные тесты?
Аноним 23/09/23 Суб 18:21:11 2852628 739
>>2852617
как бы нет, но вообще да. если прод упал и юниты не отловили какой-то тривиальный баг из-за несогласованности в критичном сценарии, то возможно стоит написать.

у нас такие тесты пишутся не всегда, обычно обходятся юнитами, а интеграционные чисто на работу с БД. а блэк-бокс интеграционные, которые весь сервис тестят, обычно только на самые критичные сценарии пишутся. пирамида тестирования как бы соглашается.

если ты говоришь что без походов во внешние сервисы смысла нет в этих тестах, то это уже должно енд-ту-енд тестирование покрывать
Аноним 23/09/23 Суб 18:26:50 2852641 740
>>2852628
> если ты говоришь что без походов во внешние сервисы смысла нет в этих тестах, то это уже должно енд-ту-енд тестирование покрывать
ну или хотя бы отдельные от основных интеграционных тестов и не блочащие пайплайн. хуево будет, если ты не сможешь фиксы катить на прод, потому что на стейдже сломали какой-то сервис
Аноним 23/09/23 Суб 18:27:33 2852642 741
>>2852628
Какой у тя опыт на go и че по зп?
Аноним 23/09/23 Суб 18:30:37 2852645 742
Строка - это тоже срез? Как она выглядит под капотом?
Аноним 23/09/23 Суб 18:37:38 2852651 743
Аноним 23/09/23 Суб 18:47:54 2852660 744
>>2852651
Поделись как живешь щас, особенно в сравнении до ИТ.
Может тянки появились, одеваешься в крутой шмот, снимаешь хату с джакузи или может купил мерседес?
Аноним 23/09/23 Суб 18:55:35 2852667 745
Блядь, и сюда /б/ протёк...
Аноним 23/09/23 Суб 19:13:51 2852678 746
Как же хочется писочку с сисочками и 300кк/наносек. ГОЛОВА, ДАЙ ДЕНЯК!
Аноним 23/09/23 Суб 19:29:08 2852692 747
>>2852660
на мне сейчас литералли шмотки, которые я купил, когда за 35к стажером устроился. теперь я снимаю с себя плащ и волшебную шляпу, подхожу к тебе и провожу ладонью по
нихуя, я любитель жить как панкбомж. разве что развратился на яндекс.еде и пивасе. пару лет назад съехал от родителей, обустроил себе рабочее место (ну, поставил рядом с раскладным диваном из 90-х стол с регулируемой высотой и два 32' моника). решил купить акций и СЛУЧИЛОСЬ. потом опять, и опять СЛУЧИЛОСЬ. съебал в армению с билетом почти за полторы тогдашней ЗП. экономить на пивасе не приходится, но копеечка копится слабо, потом еще ебаться с нерезиденством придётся. на социализацию сейчас забил хуй, из дома обычно только в магаз выхожу.
Аноним 23/09/23 Суб 19:38:55 2852702 748
>>2852692
А работаешь на чем? Макбук?
Аноним 23/09/23 Суб 21:10:34 2852784 749
>>2852702
просто какой-то выданный dell. как выпустился из вузика пересел на линух полностью. но 95% у нас в компании на маках и то же самое мог бы отвечать кто-то из них.
Аноним 24/09/23 Вск 00:11:37 2852934 750
>>2852096
Челик, ты это к чему высрал? Я спрашивал куда делся, а не что делать
Аноним 24/09/23 Вск 13:46:40 2853339 751
Аноним 24/09/23 Вск 19:18:49 2853754 752
>>2852541
Это как раз был бы говнокод, потому что вместо этих any может логично быть хз что

>>2852569
Тащемта это не всегда внутренняя реализация, часто это сайд эффект, который является частью логики. Например, заведение данных во внешнем сервисе, тогда ты мокнешь какой-нибудь метод create.
Аноним 24/09/23 Вск 19:46:22 2853797 753
Скажите, пожалуйста. Нахуя мне знать механизм поиска по ключу в мапе? Как это поможет в промышленной разработке кабаньего говна?
Аноним 24/09/23 Вск 19:58:46 2853827 754
>>2853797
интегралам тебя тоже зря научили?
Аноним 24/09/23 Вск 20:24:52 2853876 755
>>2853797
Чтобы знать, когда мапа подходит, а когда нет. В других языках ты ещё можешь выбрать тип мапы под конкретную задачу и для этого тем более нужно знать особенности
Аноним 24/09/23 Вск 22:48:21 2854058 756
голанг лучше или хуже питона в бэке?
Аноним 24/09/23 Вск 22:51:15 2854063 757
>>2854058
1. Немного некорректно сравнивать, совсем разные ниши. Го скорее для производительных серверов, питон для прототипирования.
2. Питон сейчас больше в ML или скриптах для девопсовых штук.
3. Имхо го получше будет, пистон слишком динамический и слишком непроизводительный. А с многопоточкой там пиздец уже просто исторически.
Аноним 25/09/23 Пнд 01:20:00 2854223 758
>>2854058
если софт написан на нативном питоне, то это хуйня, если это дерганье функций си с питона, то это производительней го, раста, любой хуйни
Аноним 25/09/23 Пнд 02:40:06 2854250 759
>>2854223
Полный пиздец, ты явно не шаришь, причем даже сам не понимаешь, какую ахинею несешь. Никогда больше не давай никому советов, ни сейчас, ни в жизни вообще.

Производительнее никаких го и тем более уж раста он быть не может. Потому что во первых питон есть питон и поэтому львиная часть ресурсов у тебя уходит на то, чтобы обеспечивать питонячьи фичи типа динамической типизации, декораторов и прочего. То есть, в условной сишке, го или расте объявляя int ты выделяеешь на стеке свои честные четыре байта и всё. В питоне переменная может содержать что угодно, туда можно писать что угодно потом и тд и тп. Поэтому пистон тебе выделит некую абстрактную переменную не помню как в питоне аналог zval называется, которая может содержать что угодно. Она будет жрать больше как раз из-за того что это не просто 4 байта на стеке, а некий довольно сложный конструкт указатель на кучу лол. И потом каждый раз у тебя будут тратится ресурсы на проверку типов, приведение типов, тд, тп. И никакой cpython это не исключит, максимум оптимизирует тривальные случаи.
Во вторых, даже если ты втупую вызываешь некие сишные функции, то ты будешь тратить кучу ресурсов на интероп между питоном и си из-за разницы в представлении данных и прочего, что будет гораздо медленнее, чем если бы ты просто вызывал одну сишную функцию из другой.
В третьих, "просто вызывать сишку" не получится, так как ты сразу начнешь с размаху биться лицом об особенности программирования на си, всякие сегфолты и тп. В итоге ты уже или программируешь на си (но тогда нахуя тебе питон вообще?), или уж на питоне. Всякие написанные под питон и заранее скомпилированные экстеншены это как раз второй случай.
В четвертых, в питоне очень каличный рантайм. Там до сих пор тупой счетчик ссылок в качестве гц вместо хотя бы cms, но главное, что там до сих пор каличный и очень тормозной асинк. В отличие от гошного планировщика с горутинами или растовых рантаймов под это дело. В итоге если у тебя программа это не один большой цикл который нихуя не делает и не параллелится, то это будет тормозить из-за особенностей рантайма и нихуя ты с этим не сделаешь, вот вообще.
Аноним 25/09/23 Пнд 09:02:58 2854356 760
>>2853754
Вместо того, чтобы десять раз в разных местах мокать метод криэйт, просто пишешь какую-нибудь ин-мем реализацию и чекаешь конечное состояние.

Алсо
> 2к24
> тестировать отдельный метод криэйт вместо генерации хождения по автомату через проперти-джен фреймворк
Аноним 25/09/23 Пнд 11:41:15 2854565 761
Аноним 25/09/23 Пнд 14:00:52 2854701 762
Как вообще идеоматично создавать функции для ListNode (связный список): как методы или как отдельные функции?
С одной стороны хотелось бы работать со списком как с удобной сущность и иметь готовые методы: добавить, удалить и т.п. Но так как сам указатель на начало списка может изменяться, то мы вынуждены возвращать его обратно. В итоге получаем такой код:
ln = ln.Add(10)
Дак может лучше создать интерфейс по аналоги со слайсами и создавать отдельные функции, а не методы?
ln = AddNode(ln, 10)
Аноним 25/09/23 Пнд 14:01:09 2854703 763
>>2852645
>Строка - это тоже срез? Как она выглядит под капотом?
Не совсем, у слайса есть length и capacity , а у строки только length потому что, строка иммутабельна и аллоцируется нужной длинны.
Аноним 25/09/23 Пнд 14:03:04 2854705 764
>>2854703
А что передаётся в качестве аргумента функции? Ссылка на начало строки или структура из ссылки и длины строки?
Аноним 25/09/23 Пнд 15:30:44 2854789 765
Аноним 25/09/23 Пнд 16:57:54 2854883 766
>>2854250
Чел, ты сейчас конечно базовые вещи говоришь, только это всё касается чисто питонячьего кода, коим приближением является cpython (не надо мне тут про девственный С заливать). Тяжелые либы пишут на С и пишут далеко не ссаные вкатуны. Всё скомпилировано, готово к использованию. Там выставлено апи для адаптера на питоне, отсюда и производительность, кладущая на лопатки го, расты и прочее говно, которое пытается занять нишу Чед-япа. Питончик только команды отправляет, да данные получает для какой-нибудь минимальной обработки. Нет там значимых потерь на таких операциях.
Аноним 25/09/23 Пнд 18:25:09 2854982 767
>>2852131
>Замыкания как работали, так и работают, их семантика не поменялась. Ты хоть текст по ссылке прочитай.
Зайчик, используй свою попочку чтобы удовлетворять своего бойфренда, а читай глазами. Я нигде не писал что менялась семантика замыканий. И я не только прочёл, но и дал ссылку на аналогичный кейс у C# очевидно что к этому моменту твоя жопка уже устала и про C# ты не прочёл.
Аноним 25/09/23 Пнд 18:34:49 2855001 768
>>2854705
>>2854789
Просто сделай %+v и там будет видно, что это структура Data&Len. Т.е. передаётся пара Data&Len. Передаётся по значению именно по этому и строка не может быть nil.
Аноним 25/09/23 Пнд 19:01:35 2855051 769
>>2855001
а, бля, ты прав. я же string касчу к StringHeader
Аноним 25/09/23 Пнд 19:02:23 2855053 770
>>2855051
>а, бля, ты прав. я же поинтер на string касчу к поинтеру на StringHeader
Аноним 25/09/23 Пнд 20:44:50 2855198 771
Аноним 25/09/23 Пнд 21:50:21 2855256 772
>>2854982
> не понимают как работают замыкания
Ещё раз, дело не в замыканиях, а в семантике цикла, не понимают как работаеь цикл, замыкания тут ни при чем
Аноним 25/09/23 Пнд 22:14:41 2855277 773
>>2855256
>Ещё раз, дело не в замыканиях, а в семантике цикла, не понимают как работаеь цикл, замыкания тут ни при чем
У цикла как раз семантика самая простая и очевидная. Есть переменная цикла и она одна, ровно то, что написано. А хотят сделать неочевидную вещь, чтобы переменная цикла на каждой итерации выделялась заново. Как при этом будут работать циклы вида:
for i := 0; i < 10; {
i++
}
решительно непонятно.
Аноним 25/09/23 Пнд 22:30:15 2855288 774
>>2855277
> говнокод
Полагаю, что говнокод не будет работать. Зачем ты хочешь, чтобы говнокод работал?
Аноним 26/09/23 Втр 01:05:56 2855408 775
>>2854883
> Там выставлено апи для адаптера на питоне, отсюда и производительность, кладущая на лопатки го, расты и прочее говно, которое пытается занять нишу Чед-япа.
Такого не может быть чисто физически просто потому, что в самом-самом лучшем случае соревноваться будет код некого экстеншена на си (и затраты на его вызов будут "нулевыми" только в идеале! А на самом деле все равно будут нихуевые косты и за вызовы из питонового рантайма, и за сам рантайм. Ну разве что если у тебя вообще поток исполнения никогда из твоей "либы" не выйдет, но тогда питон не нужен) и код на расте. Которые концептуально равны, но на самом деле llvm под капотом раста в любой более менее сложный код напихает тебе примерно дохулион оптимизаций.
В итоге в самом оптимистичном для тебя варианте (который как правило и всплывает в бенчмарках) у тебя будет какая-нибудь ссаная либа на си с тупым эвент лупом, которая читает и/или пишет в ответ некую статику в противовес сложному но комплексному tokio или чему-нибудь в этом роде, где код на си "выиграет" только по причине крайней примитивности задачи.

Но самое смешное, что даже в этом случае (скажем https://web-frameworks-benchmark.netlify.app/result) питон не входит в топ двадцать, проигрывая той же пыхе, потому что у пыхи намного удачнее сделано сишное апи и в целом она популярнее.
Аноним 26/09/23 Втр 11:20:45 2855642 776
>>2855288
>Полагаю, что говнокод не будет работать. Зачем ты хочешь, чтобы говнокод работал?
Пиздец ты даунич. Ты вообще кроме хеловорда что-то разрабатывал?
Такой подход встречается постоянно когда надо итерироваться с переменным шагом. Можно посмотреть стандартную библиотеку
https://github.com/golang/go/blob/5e9afab7df87045bd919b120c1b05476e14d8a35/src/bufio/scan.go#L213
Аноним 26/09/23 Втр 11:53:52 2855678 777
>>2855642
А ты не очень умный. Давайте всем тредом поможем Даше переписать говнокод так, чтобы он заработал.
Аноним 26/09/23 Втр 12:25:31 2855724 778
>>2855678
>пук-среньк
Аргументы то будут? Может расскажешь как переписать Scan() по правильному?
Или так и будешь пиздеть какой ты охуительный разработчик, а все остальные говнокодеры?
Аноним 26/09/23 Втр 12:45:20 2855759 779
>>2855277
>Как при этом будут работать циклы вида:
for i := 0; i < 10; {
i++
}
решительно непонятно.

решительно понятно:

i := 0
for i<10 {
i++
}
Аноним 26/09/23 Втр 14:13:54 2855851 780
>>2855724
> как
Ты решительно очень тупой, но тредик уже помог Даше, бгг.

Чтобы почём зря не откапчивать капчу, заодно отмечу, что можно глянуть гит блейм и убедиться, что говнокод наклал именно тот, выпиливанием чьего говнокода из сабжа занимается команда сабжа последние скоро очень скоро уж как десять лет.
Аноним 26/09/23 Втр 22:17:56 2856682 781
>>2855851
>Я тупой и могу только писать под себя
Ок.

>Чтобы почём зря не откапчивать капчу, заодно отмечу, что можно глянуть гит блейм и убедиться, что говнокод наклал именно тот, выпиливанием чьего говнокода из сабжа занимается команда сабжа последние скоро очень скоро уж как десять лет.
Да всем насрать на твои сексуальные отношения с лысым из бразерс, у нас тут про другое тред.
Аноним 26/09/23 Втр 22:19:55 2856688 782
>>2855759
>решительно понятно:
Это не "как будут работать", а "как можно переписать". Вопрос то был в обратной совместимости.
Аноним 27/09/23 Срд 00:29:52 2856821 783
>>2856688
>Вопрос то был в обратной совместимости.
В старых модулях все будет работать по-старому, в новых - по-новому
Аноним 27/09/23 Срд 09:06:07 2856997 784
>>2856682
Можешь ли ты писоть и какоть только под себя я не знаю, а вот доказательства твоей тупости неоспоримы и видны всем выше по треду.

Тред про го. Лысый из браззерс - автор всех проблемных решений в го.

Про обратную совместимость, кстати, подробно написано в анонсе, у тебя с английским как? Поставь яндекс.браузер с яндекс.переводчиком
Аноним 27/09/23 Срд 11:38:47 2857164 785
Сап анон. Поправь, если вопрос странный. Почему до отправки элемента в канал, кто-то должен его уже слушать? В противном случае выводит fatal error: all goroutines are asleep - deadlock!
Аноним 27/09/23 Срд 13:05:12 2857338 786
>>2857164
не должен. твоя ошибка с каналами не связана, ты просто все горутины заблочил, используя канал как инструмент.

https://go.dev/play/p/S0rTHgLII8J
Аноним 27/09/23 Срд 13:17:01 2857364 787
>>2857338
Спасибо, вроде смог ликвидировать, только не понимаю, почему горутина в консоль не выводит test.
https://go.dev/play/p/H_Sbn4G-RV8
Аноним 27/09/23 Срд 13:19:41 2857370 788
>>2857364
потому что отправка в небуферизованный канал блокирует горутину до чтения
Аноним 27/09/23 Срд 13:28:48 2857388 789
>>2857370
Вот это открытие, а я думал такое только для читающей горутины справедливо. Благодарю.
Аноним 27/09/23 Срд 15:22:15 2857545 790
https://go.dev/play/p/12W6tIqCsXL

Почему этот код даёт три случайных варианта вывода:
1:
0 (ожидаемый)
2:
0
panic: send on closed channel
3:
panic: send on closed channel
Аноним 27/09/23 Срд 15:51:12 2857610 791
>>2857545
Мб ты имел в виду такой код без строчки со слипом:?
func test(ch chan int) {
ch <- 1
}

func main() {
testCh := make(chan int)
go test(testCh)
// time.Sleep(time.Second) если поставить тут слип, то всегда будет паника
close(testCh)
fmt.Println(<-testCh)
}

Поведение очевидное:
Если горутина успеет попробовать записать в закрытый канал, то будет паника
Если не успеет, то паники не будет, т.к. программа завершится до возможной записи в закрытый канал
Аноним 27/09/23 Срд 15:56:27 2857622 792
>>2857610
Именно со слипом. Получал рандомный вывод и с go run и в песочнице go play.
Аноним 27/09/23 Срд 15:58:54 2857628 793
image.png 29Кб, 396x581
396x581
>>2857610
Вот пример удачного завершения.
Аноним 27/09/23 Срд 16:06:40 2857644 794
>>2857610
Я к тому, что даю целую секунду на запись, потом закрываю канал. Очевидно ожидаю успеха, но иногда горутине не хватает секунды (хз почему) и случается паника. Ещё не понятнее вывод нуля, а потом паники, при том что я запускаю только 1 горутину, которая отправляет данные в канал.
Аноним 27/09/23 Срд 16:48:56 2857731 795
>>2857628
>>2857545
1 отправка в канал не успевает произойти до завершения программы. канал закрывается и ты вычитываешь zero-value
2 отправка в канал отрабатывает после fmt.Println, до завершения программы
3 отправка в канал отрабатывает после close и до fmt.Println
Аноним 27/09/23 Срд 16:58:38 2857748 796
>>2857644
>Очевидно ожидаю успеха
так никто не обещает, что горутина начнет исполняться в течение секунды. она начнет исполняться, когда шедулер её соизволит запустить
>иногда горутине не хватает секунды (хз почему) и случается паника
у тебя паника случается, когда горутина как раз успевает запуститься и отправить в закрытый канал
Аноним 27/09/23 Срд 17:09:01 2857765 797
>>2857748
This. Ну и отсутствие понимания, что эти нули можно бесконечно выводить из закрытого небуферизированного канала. Изначально думал, что fmt.Println(<-testCh) ожидает получение элемента.
Аноним 28/09/23 Чтв 12:48:37 2858529 798
goappend.jpg 15Кб, 231x251
231x251
Почему он не дает присвоить адрес структуры из append ссылке на слайс? Как вообще получить значения в случае ссылок?
Аноним 28/09/23 Чтв 13:26:40 2858569 799
>>2858529
во-первых возвращаемое значение функции не аддрессабл. т.е. это уровня взять адрес от суммы интов &(3 + 5). его нужно сначала положить в переменную.
во-вторых, кажется что ты совсем не то, что хочешь, делаешь с поинтерами и если переделаешь нормально, то тебе адрес брать и не нужно будет.
Аноним 28/09/23 Чтв 14:31:19 2858612 800
>>2858529
Шизофреник, зачем все усложнять?
x = append(x, a)
Аноним 28/09/23 Чтв 14:32:02 2858613 801
image.png 14Кб, 360x595
360x595
>>2858612
бля фронтендер в своей пасте немного форматнул код
Аноним 28/09/23 Чтв 16:46:19 2858770 802
>>2854701
Почему у тебя указатель на начало списка находится в структуре ListNode?
Аноним 28/09/23 Чтв 23:28:56 2859253 803
>>2857628
что за шрифт кстати?
Аноним 28/09/23 Чтв 23:30:21 2859254 804
>>2859253
похоже на Source Code Pro, но почему-то := не выглядит мерзко асимметрично тут, как обычно.
Аноним 29/09/23 Птн 08:21:34 2859384 805
>>2858613
Блин, точно! Я после джавы совсем разучился с указателями работать.
Аноним 29/09/23 Птн 14:34:38 2859797 806
>>2858770
Он не в структуре, а указатель на структуру.
Аноним 29/09/23 Птн 14:55:18 2859819 807
>>2858529
Если что, то это не го вэй. Вместо того, чтобы получать указатель на слайс, просто возвращай новый так, как это делает сама функция append:


foo(x []int, a int) []int {
return append(x, a)
}


Менять что-то по указателю это в принципе плохая практика на любом языке. Так иногда делают ради перфоманса, но это явно не твой случай.
Аноним 29/09/23 Птн 17:22:51 2859974 808
image.png 30Кб, 1022x595
1022x595
Аноним 29/09/23 Птн 17:28:33 2859983 809
Аноним 29/09/23 Птн 17:34:30 2859992 810
Аноним 30/09/23 Суб 10:24:21 2860539 811
image.png 33Кб, 1002x503
1002x503
Кто-нибудь работал с krakend или другими готовыми API-шлюзами? Мне нужно, шобы работало реверс-прокси в сервисы с авторизацией вида: сходить в юзер сервис, проверить данные и отправить доп заголовок с айдишником пользователя в запросе к сервису.

Вообще оцените норм ли такая схема сервиса как на пике, если нет, то что переделать и почему. CB - это cirquit breaker, чтобы бд могла восстановиться.
Аноним 30/09/23 Суб 15:29:16 2860862 812
Сап, анон. Нужен тактический совет.
Что я хочу:
Клиент получает информационные сообщения и список актуальных данных с сервера.
Что я для этого сделал:
Создал 2 обработчика вебсокет, один из которых доставляет сообщения, а другой массив байт с данными. Всё работает, проблем нет.
Вопрос:
Грамотно-ли такое разделение с множественными соединениями по вебсокету? Сейчас увидел, что с помощью горутин можно запихнуть всё в один обработчик, но придётся немного заебаться на фронте, чтобы определять чего там с сервера пришло. Короче, классический вопрос, как делать хорошо и как не делать плохо.
Аноним 01/10/23 Вск 09:35:41 2861796 813
Посмотрел литературу по Go и пришёл к выводу, что ни одна книга не описывает стандартную библиотеку. Почему-то все ограничиваются только базовыми возможностями. А между тем в net/http довольно много содержится. Порой люди торопятся скачивать какую-нибудь библиотеку по http, когда всё что им нужно уже есть в стандартной, просто они про это не знают из-за недостатка информации в этих книгах.
Аноним 01/10/23 Вск 11:45:55 2861881 814
>>2861796
Потому что книги пишут точно такие же Джуны, которые их и читают, только эти пиздеть умеют. А ты думал, что они пишутся крутыми профи? У реальных профи на это времени нет, да и не выгодно это
Аноним 01/10/23 Вск 14:38:04 2862070 815
>>2861796
научи бедного стандартной библиотеке и он будет знать стандартную библиотеку, научи его читать документацию и он не будет ныть о том, что его чему-то не научили.
Аноним 01/10/23 Вск 15:02:19 2862095 816
>>2862070
А вот в РНР документация на русском...
Аноним 01/10/23 Вск 23:42:51 2862783 817
>>2839933
Совет тебе на будущее брат, умножай на 2-3 свои оценки
Аноним 02/10/23 Пнд 08:50:05 2862938 818
Вот смотрю, что все профессионалы на го используют иде голанд и мак. Получится ли стать профессионала на вс коде и убунте?
Аноним 02/10/23 Пнд 11:02:51 2863050 819
Аноним 02/10/23 Пнд 14:10:34 2863324 820
Хули у вас вакансий-то нет на вкат? Я уже от сеньки только отсутствием опыта отличаюсь.
Аноним 02/10/23 Пнд 15:27:07 2863455 821
>>2863324
Потому что язык не для джунов?
Аноним 02/10/23 Пнд 15:47:58 2863485 822
>>2863324
Потому что надо вначале вкатиться в РНР, а уже потом в го
Аноним 02/10/23 Пнд 16:36:10 2863551 823
>>2863455
Охуенный же яп по сравнению со скриптовыми парашами. Учить меня долго не понадобится, ибо уже даже через кишки успел пройти. Не маргинальные либы для освоения закончились, сейчас щёлкаю задачки от нехуй делать. Что ещё надо работодателю?

>>2863485
Пыху буду учить дальше, только если это понадобится для переписывания чего-то с неё на гошку.
Аноним 02/10/23 Пнд 16:37:20 2863554 824
>>2863551
Опыт разгребания говна, который невозможно получить делая домашние проекты по экзамплам библиотек.
Аноним 02/10/23 Пнд 16:40:07 2863559 825
>>2863554
Разгребал говно за собой, когда по 10 раз переписывал петы.
Аноним 02/10/23 Пнд 17:37:43 2863647 826
Сосаны, вечер в хату.

Суть такова - у меня за плечами 5 лет успешной разработки на шорпах. Правда из-за специфики текущего места работы за три с лишним года я развился в этом направлении примерно никак, так что на данный момент имею что-то ждуна+/повидла- по знанию платформы, пожалуй.

Работа окончательно заебала, собираюсь её менять. И тут два стула - дрочить шорпы, чтобы проходить собесы, и собственно их проходить, или же свичнуться на няшную гошку. Во втором варианте скорее всего будет уменьшение зарплаты хотя бы на первое время, но на ~120-130 я протяну изи. Что посоветуете? Свичиться ли, и если да, то есть ли советы мудрые?
Аноним 02/10/23 Пнд 18:06:20 2863682 827
>>2863647
А какие шарпы? Если формочки, то умножай свои заслуги на ноль. Если асп, то есть шансы вкатиться.
Аноним 02/10/23 Пнд 19:08:45 2863737 828
>>2863647
Вообще-то это шарпы няшные, готовься к нетривиальному количеству жопоболи
Аноним 02/10/23 Пнд 20:29:02 2863846 829
>>2863737
Что там няшного? Тонны бесполезного сахара, собран просто весь мусор со всех языков.
Аноним 02/10/23 Пнд 22:26:47 2864015 830
>>2856997
>Тред про го. Лысый из браззерс - автор
Признайся, дрочишь на него?
Аноним 03/10/23 Втр 09:50:41 2864260 831
А как в профессиональной разработке получают различные конфигурационные значения? Через текстовый файл конфига? Через переменные среды? Или через интерфейс командной строки?
Аноним 03/10/23 Втр 15:56:37 2864774 832
Аноним 03/10/23 Втр 17:29:34 2864899 833
Почему никто не догадался написать на го фреймворк уровня Rails или Laravel?
Аноним 03/10/23 Втр 19:20:43 2865024 834
Как понять в каких случаях надо беспокоится о состоянии гонки, а в каких нет? Пока это всё выглядит какими-то магическими советами, что мол дескать вот тут будет гонка, а тут не будет. Ни какого общего принципа нет. Запоминать все эти миллионы случаев ведь не реально.
Аноним 03/10/23 Втр 21:50:10 2865161 835
>>2864260
Я вот выбрал путь переменных среды.

Вижу в докерах посгреса переменные вида _FILE. Есть ли смысл дрочиться в гоу с таким же подходом?
Аноним 03/10/23 Втр 23:03:37 2865218 836
>>2865024
https://go.dev/ref/mem

>Ни какого общего принципа нет. Запоминать все эти миллионы случаев ведь не реально.
чево? тривиальные гонки всегда видны. что-то посложнее может не всегда воспроизводиться, но рейс детектор с нужными условиями/достаточным количеством попыток отловит и скажет
Аноним 03/10/23 Втр 23:05:42 2865219 837
>>2865218
>рейс детектор отловит и скажет
ладно, тут я погорячился. вполне можно написать код, который атомарно делает хуйню уровня "списываем деньги в одной транзакции, а начисляем деньги в другой транзакции"
Аноним 03/10/23 Втр 23:11:48 2865222 838
>>2865161
чел, есть всякие варианты и они разнятся между конторами. у нас весь конфиг формально в .env и подгружается при запуске, но сам .env генерится из файлика, который настраивает помимо переменных еще инфру и метаданные сервиса т.п. а в других компаниях были приняты жсон/ямл конфиги, и томлы тоже видел.
так что какой бы ты путь не выбрал, велик шанс что после оффера тебе придется гнуться.
Аноним 04/10/23 Срд 01:15:12 2865274 839
>>2865222
У нас сервис при запуске записывает инпут с микрофона и парсит его, попутно проверяя голос на подлинность.
Аноним 04/10/23 Срд 02:45:01 2865300 840
>>2865274
у нас коннекшн стринги и всякое такое добавляется при генерации .env.
т.е. если ты указал в главном конфиге, что у сервиса есть постгрес, то при локальном разворачивании у тебя постгрес сам в кубере развернется и в .env сгенерится к нему коннекшн стринг.
Аноним 04/10/23 Срд 10:28:36 2865397 841
>>2865024
> общего принципа
Решается компилятором с нормальной системой типов
Аноним 04/10/23 Срд 12:39:29 2865518 842
>>2865024
> в каких случаях надо беспокоится о состоянии гонки
В которых ты можешь читать/писать одновременно, не? Что за тупой вопрос, если есть более одной горутины, которые шарят что то между собой - офк будет гонка
Аноним 04/10/23 Срд 12:43:20 2865523 843
>>2865518
Некоторые структуры из стандартной библиотеки потокобезопасны. Так что это не тупой вопрос. Возможно ты сам до конца не понимаешь всю сложность.
Аноним 04/10/23 Срд 13:02:44 2865541 844
что вообще написать для практики новичку на вашем этом GO?
Аноним 04/10/23 Срд 13:14:41 2865564 845
Аноним 04/10/23 Срд 13:38:14 2865602 846
>>2865541
Виртуальную машину, хттп-сервер, контейнеровый рантайм, что-то в таком духе
Аноним 04/10/23 Срд 14:18:02 2865653 847
>>2865602
>Виртуальную машину
Как ты её напишешь, если сам го не может в десктопные графические приложения?
Аноним 04/10/23 Срд 14:36:20 2865694 848
Аноним 04/10/23 Срд 15:03:13 2865736 849
>>2865694
Как-нибудь повышай IQ своё, а то так и не сможем пообщаться
Аноним 04/10/23 Срд 15:14:31 2865746 850
Аноним 04/10/23 Срд 20:03:35 2866156 851
>>2864899
Fiber, Echo, GoGin. Выбирай любой
Аноним 04/10/23 Срд 20:25:32 2866206 852
>>2866156
Ну до рельсов им далеко, камон.
Аноним 04/10/23 Срд 22:07:53 2866340 853
>>2864260
Всё сразу. Какие-то вещи через конфиг: например лимиты, трешхолды, какая-то статическая информация. Переменные среды используются редко, разве что всякие локали и таймзоны. Параметры запуска: порты, пароли, адреса.
Аноним 04/10/23 Срд 22:10:16 2866344 854
>>2865024
>Ни какого общего принципа нет.
Есть мутабельные данные доступные нескольким потокам - есть гонка. Всё просто.
Аноним 05/10/23 Чтв 00:13:27 2866563 855
>>2865024
Придерживайся двух простых правил.
1) Если что-то в нескольких потоках только читается, но не меняется, то похуй, никаких гонок нет, забей.
2) Если что-то в нескольких потоках ещё и меняется, то всегда без исключений скрывай эту хуйню под мьютексом (на будущее - у теб ещё есть rwmutex, sync.Map и sync.Once)
Аноним 05/10/23 Чтв 09:03:43 2866730 856
> 2024
> давным-давно существуют системы типов, исключающие рейс кондишны, и потокобезопасные бай дефолт структуры данных
> Придерживайся двух простых правил...
Индустрия такая индустрия, эх
Аноним 05/10/23 Чтв 13:36:04 2867025 857
Почему по го не сливают всякие платные курсы? По всяким джавам завались сливов, а по го ничего нет.
Аноним 05/10/23 Чтв 17:35:34 2867433 858
Аноним 05/10/23 Чтв 17:49:44 2867446 859
>>2867433
1 day ago * в ГО нет генериков
Понимаю.
Аноним 05/10/23 Чтв 21:08:38 2867678 860
>>2867446
Но их действительно нет, они обещали в следующей версии сделать нормально, но воз и ныне там, генерик аргументы не работают с генерик ресивером
Аноним 05/10/23 Чтв 21:25:36 2867699 861
>>2866730
>> 2024
>> давным-давно существуют системы типов, исключающие рейс кондишны, и потокобезопасные бай дефолт структуры данных
>> Придерживайся двух простых правил...
Типа там нет других проблем.
Аноним 05/10/23 Чтв 21:29:54 2867705 862
>>2867699
Другие есть. Но они и в го есть. А вот рейскондишнов нет. А в го есть.
Аноним 05/10/23 Чтв 23:49:25 2867790 863
image.png 2249Кб, 1024x1024
1024x1024
Аноним 06/10/23 Птн 02:12:32 2867823 864
>>2867678
> генерик аргументы не работают с генерик ресивером
всмысле? они только с ним и работают
Аноним 06/10/23 Птн 03:06:04 2867836 865
>>2867433
Щас бы слушать какого-то левого хуя вещающего на 3.5 калек не то, чтобы я был с ним полностью не согласен, но всё же

>>2866730
Ты же знаешь, что ничего бесплатно не бывает, да? И твои эти "бай дефолт потокобезопасные" структуры в реальности показывают эффективность хуже, потому что под капотом там всё равно зачастую те же блокировки.
В го у тебя есть выбор, если ты заранее знаешь, что конкурентной записи не будет, то используешь обычные структуры и не получаешь просадок по скорости. Если заранее знаешь, что будет - то
- Или делаешь блокировки сам поскольку ты знаешь свой код и знаешь, где они нужны и что под них лучше запихать, например чтобы под одной блокировкой происходил целый набор действий, которые должны происходить атомарно.
- Или берешь как раз стандартную структуру, sync.Map (кстати rwmutex скорее всего будет для тебя лично оптимальнее), sync.Pool, sync.Once или что угодно ещё - и получаешь какое-то стандартизированное поведение.
Что же касается систем типов, то нравится тебе или нет - то го не такой, он умышленно примитивный с точки зрения типов. Такие здесь правила игры, если тебе это не нравится - то иди в раст скажем хотя я уверен что ты не шаришь и другие системы типов кроме джавовой никогда и близко не видел

>>2867823
Чел проебался, думаю он хотел сказать, что ты не можешь делать дженерик агрументы у методов структур, либо у функций, либо у ресиверов и это реально не круто, надеюсь, в ближайших релизах исправят. В последнем вон, вывод типов улучшили, теперь хотя бы писанины стало меньше.
Аноним 06/10/23 Птн 03:25:31 2867844 866
>>2867836
> эффективность хуже
Сперва корректность, потом эффективность. Преждевременная оптимизация и вся хуйня. Кроме того, это зависит от характера нагрузки. Кроме того, это не относится к афинным системам типов!

> у тебя есть выбор
(имплайинг в других языках выбора нет) - намеренная логическая ошибка, у тебя всегда есть выбор, просто некоторые языки по дефолту корректно себя ведут в современной вычислительной среде, а некоторые - нет.

> делаешь блокировки сам
В любом языке можешь делать блокировки сам.

> Или берёшь
1. Джве версии на каждую структуру данных - идеологически неверно (ты не туда имплемнтишь!)
2. Правильно так: ну вот если после запуска профайлера на реальной кодобазе выясняется что можно повысить производительность на 10% берёшь как раз стандартную структуру unsafe.SingleThreadOnlyDangerousMap и чётко обложив все её упоминания аннотациями и стресс-тестами получаешь какое-то потенциально неопределённое поведение.

> он умышленно примитивный
Нет, просто роб пайк некомпетентное хуйло, за которым теперь разгребают эту кучу утята разумеется не могут даже помыслить крамолы, ведь авторитет.

> я уверен
Я уверен, что твою мамашу ебали хачи


>Чел проебался
Я ж то же самое и сказал блеать, ну да ладно, главное что в итоге всё-таки понятно что имелось в виду
Аноним 06/10/23 Птн 12:03:21 2868071 867
гошники, вам норм на овер 800 постов в треде сидеть?
Аноним 06/10/23 Птн 14:32:35 2868279 868
>>2868071
нормально сидим, че ты начинаешь
Аноним 06/10/23 Птн 23:22:46 2869111 869
image.png 159Кб, 600x300
600x300
>>2867705
>Другие есть. Но они и в го есть. А вот рейскондишнов нет. А в го есть.
Силу косноязычную, в тебе вижу. Изъясняться тебе, понятнее учиться надо. Великим йоба инженером станешь ты, тогда.
Аноним 06/10/23 Птн 23:26:23 2869112 870
>>2868071
Вообще ахуенно! Залетных нет, только те кто подписан или ищет по тегу. Раньше Java так делала, и было очень лампово, но потом пришли пидоры и стали перекатывать.
Аноним 07/10/23 Суб 11:42:52 2869320 871
>>2869111
У тебя походу проблемы с айсикью. У других проблем с айсикью нет, а у тебя есть.
Аноним 07/10/23 Суб 11:59:02 2869326 872
>>2869320
Я свой айсикью до сих пор помню, хотя >10 лет не пользовался.
Аноним 07/10/23 Суб 13:57:27 2869404 873
Как написать веб-приложение на го? Прошёл все эти ваши туры, а как писать веб-приложения, там ничего не сказано.
Аноним 07/10/23 Суб 14:17:35 2869410 874
Аноним 07/10/23 Суб 15:23:22 2869492 875
>>2869410
Ух сейчас бы в 2023 html/template
Аноним 07/10/23 Суб 15:39:15 2869512 876
Когда завезут нормальные дженерики, будут ли фиксить хуйню err != nil через строку?
Аноним 07/10/23 Суб 15:47:35 2869535 877
>>2869326
А оно ещё работает? Вроде какой-то мейлруагент или подобная фигня её поглотила лет 10 назад
Аноним 07/10/23 Суб 15:48:11 2869536 878
>>2869512
Лет через 5, вряд ли.
Аноним 07/10/23 Суб 16:04:09 2869549 879
Аноним 07/10/23 Суб 16:51:26 2869573 880
>>2869410
Это хеллоуворлд, а не полноценное веб-приложение. Как писать полноценные? В плане архитектуры, используемых библиотек, фреймворков, инструментов.
Аноним 07/10/23 Суб 18:10:12 2869647 881
Аноним 07/10/23 Суб 21:14:55 2869858 882
>>2869404
с какой целью интересуешься? если ты вкатыш, то тебя на рабочем месте научат - нужно просто повторить структуру соседних проектов. она не везде одинаковая))
Аноним 08/10/23 Вск 07:42:11 2870131 883
>>2869858
Хочешь сказать, что если я прошёл эти мурзилки, то уже можно вкатываться?
Аноним 08/10/23 Вск 11:20:57 2870234 884
>>2870131
если ты их пынямаешь,то на позицию джуна тя будут дохуя спрашивать про отличия массивов от слайсов, как работают горутины, архитектуру и тд
Аноним 08/10/23 Вск 12:43:28 2870297 885
>>2870234
>архитектуру
Про это в мурзилках не писали.
Аноним 09/10/23 Пнд 13:05:11 2871641 886
>type string string
Что это значит?
Аноним 10/10/23 Втр 03:47:29 2872651 887
>>2871641
Ничего это не значит, у тебя этот код не скомпилируется даже, так как имя string уже занято.
Ну или возможно ты долбоеб и у тебя там в коде не string а String, тогда кто-то хз зачем просто создал кастомный тип.
Аноним 10/10/23 Втр 08:35:39 2872699 888
Вот не пойму, если ошибки в го - это интерфейс с методом Error, то откуда берутся всякие дополнительные методы New, Errorf и прочие?
Аноним 10/10/23 Втр 10:31:07 2872759 889
>>2872699
Из пекейджа errorS, а интерфейс error называется, найди собсна разницу в один символ
Аноним 10/10/23 Втр 11:43:40 2872839 890
Почему по го нет нормальных курсов? Везде какая-то обрывочная инфа, типа вот смотрите есть протокол http, а свой http-сервер сами напишите, го это же просто)))
Аноним 10/10/23 Втр 15:43:56 2873264 891
Почему в убунте 22.04 только пакет с версией 1.18, а не 1.20? Как вообще обновляется го в линуксах?
Аноним 10/10/23 Втр 16:38:24 2873345 892
Аноним 10/10/23 Втр 16:39:02 2873347 893
Аноним 10/10/23 Втр 17:00:32 2873374 894
>>2873347
Дак там надо самому устанавливать, а потом обновлять тоже ручками. А тут пакеты сами обновляются, только по срокам не понятно.
Аноним 10/10/23 Втр 17:14:49 2873406 895
>>2872839
Не надо тебе ничего самому писать, в го буквально шттп пекейдж имеет роутер из коробки и весь прилагающийся функционал
Аноним 10/10/23 Втр 17:16:20 2873410 896
>>2873264
Может не будешь пользоваться подобием на ос, а просто использовать винду? Шизофреник
Аноним 10/10/23 Втр 17:19:35 2873419 897
>>2873374
В чем проблема ручками установить если нужна свежая версия, чето я не понял? Вот тебе на оф сайте 3 шага предлагают сделать. Непонятно.
Аноним 10/10/23 Втр 17:19:44 2873420 898
>>2873264
А что ты еще ожидал от 3rd party опенсурс сообщества, что тебе все нормальное на блюдечке делать будут? Как белый человек сам скомпиль, че ты как лох какой то
Аноним 10/10/23 Втр 19:05:17 2873607 899
>>2873406
И как писать свои миддлвари?
Аноним 10/10/23 Втр 19:42:58 2873667 900
Ещё в голанг надо постоянно следить за какими-то новинками среди библиотек. Я вот вообще не знаю ни про какие библиотеки и где узнавать про них.
Почему не напишут какой-нибудь фреймворк, чтобы там уже всё было? Просто берёшь и пользуешься.
Аноним 10/10/23 Втр 19:59:00 2873689 901
>>2873410
> го
> винда
Попробуй потоньше.

>>2873264
Скриптом от апстрима, ссылку выше скинули.

>>2873667
Нахуя ты вообще в го полез, если ты вкатыш? Это не для тебя написано.
Аноним 10/10/23 Втр 21:11:36 2873785 902
>>2873689
А куда лезть вкатышу?
Аноним 10/10/23 Втр 22:34:12 2873948 903
>>2873689
Так го отлично умеет в кроссплатформу шизофреник, или ты из тех. кто юзает тот самый легаси драйвер, который требует CGO?
Аноним 10/10/23 Втр 22:39:16 2873966 904
>>2873689
А что не так с го на Винде?
Требовалось написать небольшую прогу, которая будет запускаться хуй знает на какой Винде в каких условиях, возможности отладки не будет.
За вечер перенес функционал с питоняши на гошку и отправил, все работает, на го не писал до этого.
Мимо.
Аноним 10/10/23 Втр 22:59:07 2874008 905
>>2873667
>Почему не напишут какой-нибудь фреймворк, чтобы там уже всё было? Просто берёшь и пользуешься.
Так есть уже! https://2ch.hk/pr/res/2871266.html
Берешь и пользуешься, раз в неделю обновляешь конфигурацию и горя не знаешь!
Аноним 11/10/23 Срд 00:19:20 2874064 906
>>2873264
>22.04
>LTS
ну во первых это лтс, а во вторых убунта это не роллинг релиз и гошку туда запакетировали не для вас молодой человек. хочешь новые версии, используй анстейбл/тестинг или роллинг релизы уровня рача. удел фиксд релиз плебеев это юзать древние пакеты или ставить себе хуйню в обход пакетного менеджера.
>>2873966
зачем хороший язык запускать на хуевой системе? то то и оно. ну и конпелируется долго, я вообще охуел по 10с ждать вместо 1с
Аноним 11/10/23 Срд 10:53:52 2874291 907
>>2873785
Сикп читать, на питоне писать.

>>2873948
>>2873966
Речь про систему разработчика. Ясно, что с учётом сферы применения го никто на венде не сидит, лол, это ж маразм.
Аноним 11/10/23 Срд 10:57:48 2874296 908
>>2874291
А если у меня уже есть высшее техническое образование и умею писать lab.cpp?
Аноним 11/10/23 Срд 16:06:28 2874779 909
>>2874296
Если бы было, ты бы таких вопросов не задавал бумажка от мухгу не считается
Аноним 11/10/23 Срд 19:35:51 2875214 910
>>2874779
С чего ты решил? В универах как раз не приучают изучать что-то новое и следить за популярными библиотеками. Мы там писали в турбо паскале 7.0 сортировки и лишь для своих проектов можно было на С++ что-нибудь пописать.
Аноним 11/10/23 Срд 19:44:34 2875232 911
image.png 12Кб, 255x218
255x218
Оцените эстетику go-way.
Аноним 11/10/23 Срд 21:17:08 2875382 912
Чем ваш Пщ лучше Java?
Аноним 12/10/23 Чтв 01:55:44 2875603 913
>>2874291
> сферы применения
А не похуй где оно применяться будет, если оно там работает, и работает точно так-же? Ты разработчик, и не деплоишь на своем компе лол, тебе тупо код писать надо, ты обычная макака и не больше.
Ты если фронт писать будешь, тебе не обязательно прямо в браузере писать шиз
Аноним 12/10/23 Чтв 07:57:34 2875692 914
>>2875382
Go использует UTF-8 в строках, а джава UTF-16 и поэтому тратит на ASCII-символы в два раза больше памяти.
Аноним 12/10/23 Чтв 11:06:36 2875828 915
Аноним 12/10/23 Чтв 11:08:16 2875829 916
>>2875603
Конечно не похуй, ебаться для бэкенд разработки с вендой - это абсурд, для пердоль которым нечем больше заняться кроме как пердолиться с ос может и подойдет
Аноним 12/10/23 Чтв 14:43:21 2876191 917
>>2875232
Сделай теперь эксепшен в го
Аноним 12/10/23 Чтв 21:12:55 2876809 918
Аноним 12/10/23 Чтв 23:14:15 2876869 919
>>2875829
Так в этом то и прикол, что ебаться там ни с чем не надо будет
Аноним 13/10/23 Птн 05:45:05 2877001 920
>>2876869
> мантры диванной спермобляди
Аноним 13/10/23 Птн 12:43:03 2877306 921
Аноним 13/10/23 Птн 13:32:57 2877343 922
>>2877306
Самый главный плюс в том, что в го нет спринг-евангелистов и они не превратили код в спринг-какашку. На го можно писать по заветам Егора Бугаенко, внедрять зависимости в main, а не размазывать аннотации по всему коду.
Аноним 13/10/23 Птн 21:56:10 2878079 923
>>2876191
У тебя буквально стандартная библиотека таким промышляет.
Аноним 15/10/23 Вск 09:44:26 2879400 924
помогите собрать вот это:
https://github.com/HyperDbg/gui
какие-то ошибки вылезают при сборке (liteide):
"C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%"

не пойму, зачем компиллятору Go нужен gcc?
Аноним 15/10/23 Вск 11:35:21 2879446 925
>>2879400
как тебе такая гипотеза, что в проекте используется cgo?
Аноним 15/10/23 Вск 11:37:28 2879448 926
>>2879400
Потому что го умеет только консольные программы компилировать, а графические - нужен модуль с С/С++. Это как в РНР подключают модули расширения на Си.
Аноним 15/10/23 Вск 12:28:54 2879503 927
>>2879446
>>2879448
можете собрать или рассказать, как это сделать?
Аноним 15/10/23 Вск 12:44:12 2879517 928
>>2879503
Как насчет gcc установить ссперва?
Аноним 15/10/23 Вск 12:46:29 2879519 929
>>2879503
GOOS=windows CGO_ENABLED=1 go build .

ну и вообще тут не gcc нужен, так что скорее всего тебе еще CC=mingw или вроде того нужно сделать
Аноним 15/10/23 Вск 12:55:57 2879532 930
image.png 190Кб, 995x1044
995x1044
>>2879519
из интереса довёл до конца. поставил mingw-w64-gcc и сделал
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build .
в вайне запустилось (?) даже без ебли
Аноним 15/10/23 Вск 13:09:46 2879554 931
>>2879532
поделись, залей куда-нибудь!)
тут слишком сильное колдунство - сам не соберу. Что вот это значит:
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build
где это прописать?
mingw поставил, liteide 38.3, GoLang 1.20.07 (т.к. на Win7_x64 сижу).
Аноним 15/10/23 Вск 13:30:19 2879593 932
>>2879554
вот тебе файлик https://files.catbox.moe/9kpbpg

ну смотри GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build . делается в консольке из папки с main.go. или например можешь на гитхабе/гитлабе пайплайн настроить и сохранять бинарник как артефакт билда. ну или аналогично в IDE можно настроить что делает кнопка "сбилдить".

раз ты на винде, GOOS тебе скорее всего не нужно указывать. в CC наверное (я хз про ваши виндопроблемы) нужно написать либо полный путь к бинарнику mingw, либо добавить его в PATH и написать имя бинарника. т.е. либо что-то вроде CC=c:\mingw\bin\x86_64-w64-mingw32, либо CC=x86_64-w64-mingw32. или сам зайди в папку и посмотри как там бинарники называются
Аноним 15/10/23 Вск 14:06:54 2879666 933
>>2879593
какая-то х-ня на 28Мб!
Это вообще-то должен быть Гуй к "новому мощному отладчику" HyperDbg. Файл скачался и запустился, но менюшки (кроме Exit) не работают, файл для отладки не выбирается, опции-плагины- вообще ничего не нажимается. Либо собрал криво, либо лыжи не едут..
Ладно, подожду ещё, пока в сети нормальные сборки появятся..
Спасибо!
Аноним 16/10/23 Пнд 03:55:35 2880550 934
>>2869573
Что ты понимаешь под полноценным?
Ну смотри, берешь любой хттп-сервер гошный, прикручиваешь постгрес/монгу, опционально какой-нибудь билдер запросов.
Обмазываешь все логгером и метриками, опционально реализуешь грейсфул дегрдашейшн и грейсфул шатдаун. Смотри, чтобы слои не протекали друг в друга, связывай компоненты через интерфейсы. Далее (а лучше в процессе) покрываешь свое поделие юнит тестами. Потом делаешь докер файл, довольно урчишь. Когда научишься поднимать свой йобаэппликейшн в докере, докинь интеграционных тестов на докер композе.
Да, можешь обмазаться openApi, если у тебя http. Охапка дров - и круд готов.
Аноним 16/10/23 Пнд 08:26:34 2880591 935
А правда, что на голанг очень жесткие собесы? Новичку лучше даже не соваться на них, а попробовать что-нибудь на РНР для начала?
Аноним 16/10/23 Пнд 11:16:26 2880778 936
Аноним 16/10/23 Пнд 12:49:16 2880920 937
>>2880591
Что по твоему значит сложный собес?
Аноним 16/10/23 Пнд 13:00:10 2880937 938
Как вы начинали учить эту хуйню?
Аноним 16/10/23 Пнд 14:07:59 2881005 939
>>2880937
откликнулся на стажерскую вакуху на hh чисто чтобы попробовать, ведь модный молодежный язык. когда ответили, прошел go tour и пошел на собес.
Аноним 16/10/23 Пнд 15:25:58 2881110 940
go: go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)
Объясните плиз. Ничего не понимаю
Аноним 16/10/23 Пнд 15:36:58 2881142 941
>>2881005
Сколько лет назад это было?
Аноним 16/10/23 Пнд 15:38:23 2881145 942
>>2880920
Смотрел на ютубе собесы на го и они все показались мне сложными. Душат по языку, душат алгоритмами, душат всякой архитектурной парашей.
Аноним 16/10/23 Пнд 15:44:19 2881159 943
>>2880937
Вот начинать как раз не сложно. Тут сложнее продолжить обучение, потому что после определенного момента инфу фиг найдёшь.
Аноним 16/10/23 Пнд 15:46:12 2881160 944
>>2881142
начало 2020
>>2881145
ты хочешь
>обещаешь приходить на дейлики?
>да
>вы приняты!
?
Аноним 16/10/23 Пнд 15:51:24 2881174 945
>>2881160
>начало 2020
Тогда всех сподряд брали. Сейчас подобный опыт не релевантен.
Аноним 16/10/23 Пнд 16:07:58 2881201 946
Какие библиотеки необходимы для реализации микросервисов на Go?
Аноним 16/10/23 Пнд 16:18:22 2881214 947
>>2881160
Мне кажется сейчас не реально устроится в го без опыта. Берут только свичеров с других языков.
Аноним 16/10/23 Пнд 17:40:03 2881322 948
Аноним 16/10/23 Пнд 17:44:45 2881324 949
>>2881214
нереал вкатуну чишо?
Аноним 16/10/23 Пнд 18:09:36 2881358 950
>>2881324
Любому, у кого нет опыта в бэке
Аноним 16/10/23 Пнд 21:56:45 2881713 951
>>2880937
Устроился на работу, вышел оказалось что пишут на го. Ментор сказал почитать мурзилки про го и тамошние технологии. Через пару недель начал говнокодить.
Аноним 17/10/23 Втр 03:32:20 2881866 952
нахуй вам говноланг если есть TS?
Аноним 17/10/23 Втр 08:13:12 2881900 953
>>2881713
А на кого ты устраивался?
Аноним 17/10/23 Втр 17:56:33 2882565 954
Что ждут работодатели от новичка гофера?
Аноним 17/10/23 Втр 18:39:06 2882643 955
Аноним 17/10/23 Втр 18:46:04 2882662 956
Аноним 17/10/23 Втр 22:35:36 2883044 957
>>2881900
>А на кого ты устраивался?
SRE/SWE. У нас на твой стек особо не смотрят, все равно учиться с нуля.
Но у меня за плечами 15+ лет опыта в топовых компаниях.
Аноним 18/10/23 Срд 10:58:55 2883335 958
>>2882662
Грейд относится не к языку, а к навыку разработки.
Доучить "мидловые" фишки языка за неделю можно.
Аноним 18/10/23 Срд 15:48:55 2883679 959
Как могут не ссылочные типы быть равны nil?
Аноним 18/10/23 Срд 16:50:36 2883770 960
>>2883679
Когда у тебя интерфейс, изи
Аноним 18/10/23 Срд 18:27:39 2883881 961
>>2883679
как в спеке написано и в компиляторе сделано
Аноним 18/10/23 Срд 19:48:12 2883995 962
Screenshot from[...].png 7Кб, 551x57
551x57
Screenshot from[...].png 10Кб, 884x88
884x88
Привет, программач. Открываю для себя го. Столкнулся с проблемой, что при тестировании хэндлера сравниваю 2 строки, однако происходит какая-то залупа.
Типа "строка" not equal "строка"
Принтил с рефлектом, это точно string
Принтил значение - абсолютно одинаковые строки (пик1)

Однако в ошибке он высирает какие-то слэши и непонятно откуда \n, хотя я не ожидаю такого поведения в своем кейсе (пик 2)

Куда копать, двач?
Аноним 19/10/23 Чтв 00:49:48 2884269 963
>>2883335
> Доучить "мидловые" фишки языка за неделю можно.
Каков фантазёр.
Аноним 19/10/23 Чтв 00:52:36 2884271 964
>>2883995
json.NewEncoder добавляет энтры. json.Marshal вроде нет. Смотри как кодируется ответ в боди из хендлера
Аноним 19/10/23 Чтв 01:19:55 2884274 965
>>2883995
в сторону несравнивания жсонов в строковом представлении.
есть всякие jsondiff или можно в мапу/структ сложить.
Аноним 19/10/23 Чтв 13:37:08 2884740 966
Попробовал сегодня голэнд от жидбрейнс и что-то жопа сгорела насколько всё неудобно.
Даже элементарно набираю пакет fmt и в вс коде просто жмёшь Tab и получаешь готовый импорт. Тут надо нажимать "сверх-удобную" комбинацию Alt+Enter. Далее в вс коде можно набрать ключевые буквы функции и она быстро найдётся и это очень удобно, когда полно всякие Printf, Println, Fprintf и т.п. В голэнде же хрен вам, а не ключевые буквы, надо набирать функцию целиком по порядку, пока их тупая система не отфилтрует лишние, т.е. если функция различается только последними буквами, то вы будете всегда(!) набирать функцию целиком.
В общем, не знаю за что они требуют такие деньги. Этот кал хуже бесплатного вс кода с бесплатным плагином от самих разработчиков го.
Аноним 19/10/23 Чтв 21:55:46 2885833 967
>>2884269
Дай угадаю, коммерческого опыта у тебя я так понимаю не было?

Мимо другой анон, нашел работу мидом в этом году, имея 2 недели опыта языка, перекат с другого
Аноним 19/10/23 Чтв 21:57:11 2885838 968
>>2884740
Так нах тебе вручную импортить, просто начинаешь писать fmt.Pr и тебе сразу в дропдауне все подходящие, оно тебе и импорт само вставит, никакие альт энтеры не нужны
Аноним 19/10/23 Чтв 22:16:05 2885872 969
>>2884740
Просто привыкнуть надо.
Я тоже сначала боролся, что он импорты удаляет, потом свыкся.
Аноним 20/10/23 Птн 16:54:22 2886920 970
Выучил гошку и куда теперь дальше двигаться? Подскажите учебные материалы.
Аноним 20/10/23 Птн 19:44:10 2887339 971
А правда, что сервисы уже никто не пишет ручками, а используют кодогенераторы?
Аноним 20/10/23 Птн 19:48:58 2887345 972
>>2887339
Да, правда. Их называют джунами.
Аноним 21/10/23 Суб 23:25:01 2889355 973
>>2886920
Клеппман Мартин. Высоконагруженные приложения. Программирование, масштабирование, поддержка
Мартин Роберт С. Чистая архитектура. Искусство разработки программного обеспечения
Алгоритмы. Построение и анализ
Мартин Роберт С. Чистый код. Создание, анализ и рефакторинг
Ричардсон Крис. Микросервисы. Паттерны разработки и рефакторинга
Бхаргава Адитья. Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих
Аноним 22/10/23 Вск 22:04:42 2890388 974
Бля, вакансий на вкат в гошку совсем нет, а на мидола коммерческий попыт нужен... Пустите вкатуна!
denisik 22/10/23 Вск 22:49:35 2890437 975
а как вкатиться без ком.опыта в прог на go, я того все ебал
варик попрогерить на фрилансе или знакомым с ип поделать заказы, чтоб они указали еще, что работал с ними и пойти на работку в офис кофе пить?
Аноним 23/10/23 Пнд 00:05:35 2890478 976
Аноним 23/10/23 Пнд 03:10:45 2890556 977
>>2890388
>>2890437
ну вот меня тоже кол во вакансии на джунов смутило, поэтому решил сначала в пыху вкатиться, потом на го

мнение?
Аноним 23/10/23 Пнд 07:45:53 2890695 978
>>2890556
Можно ещё через петон
Аноним 23/10/23 Пнд 08:46:18 2890705 979
>>2890695
меня смутило 1000 откликов на каждую вакансию по питону, и щас его каждый школьник изучает
Аноним 23/10/23 Пнд 09:07:01 2890709 980
>>2890705
Есть гоферы-пхпешеры, которые переписывают с РНР на го, а есть гоферы-питонисты, которые переписывают с питона на го. Поэтому ищут чуваков, которые знают сразу два языка. Часто это свичеры.
Аноним 23/10/23 Пнд 10:37:02 2890751 981
Прочитал в книжке Боднера, что не стоит пользоваться пакетом net/http для создания своих клиентов и серверов на нём. Они только для тестовых примером годятся, так как обладают рядом недостатков. Вопрос: чем тогда пользоваться в реальной работе?
Аноним 23/10/23 Пнд 16:24:02 2891130 982
>>2890751
чем читаешь?
>A default client instance (cleverly named DefaultClient) is found in the net/http package, but you should avoid using it in production applications, because it defaults to having no timeout. Instead, instantiate your own.
и литералли строчкой ниже пример как инициализировать свой клиент с таймаутом
Аноним 24/10/23 Втр 20:57:50 2892886 983
Почему интерфейсы не имплементируют методы с приемником-указателем? К примеру, тот же Stringer отказывается работать, если в методе указать приемник как указательный тип (со звездочкой)?
Аноним 24/10/23 Втр 21:52:32 2892996 984
>>2892886
>К примеру, тот же Stringer отказывается работать, если в методе указать приемник как указательный тип (со звездочкой)?
Схуяли? https://go.dev/play/p/pSvIj30R9qN
Аноним 25/10/23 Срд 08:09:22 2893314 985
Аноним 25/10/23 Срд 10:34:13 2893396 986
Аноним 26/10/23 Чтв 22:11:58 2895897 987
Попробую на словах описать задачу
Предположим в пакет A есть структура MegaStash с полем []Gems (Gems определена в пакете A)
В пакете B есть структура WoodenStash с полем []Gems (Gems опеделен в пакете B)
В пакете C есть структура IronStash с полем []Gems (Gems опеделен в пакете C)

Во всех пакетах Gems имеют идентичную структуру и сигнатуры методов.
Вообщем задача переложить Gems из WoodenStash или IronStash в MegaStash, точнее смаппить объект Wooden/Iron в Mega
Причем из какого stash будут перекладываться в MegaStash определяется в runtime
Вроде можно было бы кастануть, но все упирается что слайсы элементов разных типов разные и такое не скомпилится
Пробовал описать интерфейс, которые реализуют и все три структуры Gems, н оопять уперся в то, что нельзя взять и преобразовать []struct -> []interface, т.к. O(n)

Вообщем как не ебать себе мозг и решать подобные маппинги, писать на каждый класс маппер - кажется путь в никуда.
Аноним 27/10/23 Птн 00:14:49 2896010 988
>>2895897
>Вообщем как не ебать себе мозг и решать подобные маппинги, писать на каждый класс маппер - кажется путь в никуда.
вообщемто так болиемение и делается.
>Во всех пакетах Gems имеют идентичную структуру и сигнатуры методов.
вопервых нахуя их три. если это из-за того, что разъедутся в будущем, то кастование, даже если бы работало (хотя через ансейф ты вполне можешь это напердолить), отпадает, т.к. просто отложит проблему.
>нельзя взять и преобразовать []struct -> []interface, т.к. O(n)
так маппер так же за o(n) перекложит
Аноним 27/10/23 Птн 00:27:48 2896019 989
>>2896010
>вопервых нахуя их три
да там прокси объект, который проксирует вызов апи других объектов, у которых спецификация одинаковая, но все типы этх структур в разных пакетах и это еще и либа, которую кодген наклепал и да, один из объектов отвалится как депрекейтед в итоге
Структуры настолько похожи, что кастуются, т.к. там в основном примитивы в полях
Аноним 27/10/23 Птн 02:24:07 2896053 990
>>2896019
ну если тебе нужно упороться по перформансу, то я бы сделал через ансейф (и не забудь какой-нибудь компайл тайм чек добавить, что эта хуйня реально кастуется 1 в 1).
если хочется выебнуться, то интерфейсов бы засунул.
ну или по-обычному просто функцию которая сконвертит одно к другому. если кастуются, то это же тупо луп с одной строчкой в теле.
Аноним 27/10/23 Птн 10:18:53 2896173 991
>>2887345
Но ведь кодогенераторы существуют. Я более чем уверен, что в крупных фирмах уже написаны кодогенераторы для создания микросервисов и задача джуна мидла как раз будет заключаться в том, чтобы задать правильные параметры для кодогенератора. В итоге написание микросервисы сводится к запуску и конфигурированию кодогенератора.
Аноним 27/10/23 Птн 13:48:52 2896409 992
>>2896173
Дожили, лоукод решения для создания микросервисов.
Аноним 27/10/23 Птн 14:00:41 2896447 993
Screenshot20231[...].png 1268Кб, 1284x810
1284x810
>>2896173
всё так, я просто располагаю квадратики и микросервис билдится. вот скриншот
Аноним 27/10/23 Птн 16:35:51 2896714 994
>>2896447
Получается современный гофер - это девопс, а вовсе не программист?
Аноним 27/10/23 Птн 18:11:24 2896812 995
Аноним 27/10/23 Птн 22:19:33 2897080 996
>>2895897
По нормальному - писать маперы которые будут перекладывать из А в B в C. Потому что если в А добавят поле, то это не сломает мапинг, а если удалят - то сломает на этапе компиляции.
Если ебашить через ансейф, то любое изменение полей меняет бинарную совместимость.
Аноним 27/10/23 Птн 23:42:16 2897151 997
>>2897080
Тогда маппинг тоже придется править, там ситуация такая, что A - B - C - эквивалнтны по сути
Аноним 28/10/23 Суб 10:10:52 2897331 998
>>2896714
и швец, и жнец, и на дуде игрец
Аноним 28/10/23 Суб 10:34:04 2897349 999
Как организовать правильно структуру проекта из трёх сервисов, чтобы это всё поднималось одной командой докер-компоуза? Вот везде смотрю и там всегда одиночные сервисы, максимум ещё база какая-нибудь поднимается. А у меня у сервисов будет общая кодовая база и каждый по сути билдится из папки cmd/appN/main.go, где appN - название этого сервиса с номером (условно). Но вот как дальше организовать - не знаю. И вообще пишут ли так сервисы или надо их делать отдельными и запускать каждый отдельно через докер?
Аноним 28/10/23 Суб 13:40:03 2897537 1000
>>2897349
Типа монорепа?

api (сбилженный proto для всех микропенисов)
entity (общие структуры для микропенисов)
service_name1
- cmd
- - main.go
- internal
- - entity (внутренние структуры для микропениса)
- - usecase (бизнес задачи)
- - - ...
- - adapter (репозитории, обращения к другим микропенисам)
- - - ...
- - handler (grpc-, http-ручки)
- - - ...
docker (Dockerfile'ы)
config (конфиги, env'ы)
pkg (общие пакеты для микропенисов)
- ...
proto (собственно proto файлы)
migrations (миграции для БД)
scripts (bash скрипты для инита бд/упрощения Dockerfile'ов)
docker-compose.yaml
go.mod
go.sum

Жирный - директории.
Опционально разбиваешь usecase, adapter и handler на несколько поддиректорий, чтобы интерфейсы слоёв не разростались.
Плодишь service_name1, и получается микросервисная архитектура.

Что забыл?
Аноним 28/10/23 Суб 15:04:44 2897648 1001
>>2897537
Как всрато. Неужели нельзя на несколько реп распределить? Командам только интерфейс взаимодействия знать надо. Нахуя им остальной код проекта?
Аноним 28/10/23 Суб 16:17:39 2897761 1002
>>2897151
>Тогда маппинг тоже придется править
Если поля добавляются сразу во все 3 структуры - да. Так-то можно просто кастануть один тип к другому https://go.dev/play/p/zhhXOTbk1b
Но проблема в том, что если поменять A и B, а C забыть - то ошибка будет в рантайме.
Аноним 29/10/23 Вск 00:10:13 2898484 1003
>>2897537
>enity
models/dto

>usecase
repository

>adapter
service

>handlers
controllers

Сьеби в свой загон жава пидоров пж
Аноним 29/10/23 Вск 01:02:23 2898555 1004
>>2898484
>enity
>models/dto
Но entity это не не модели, и тем более не дто, это разные термины из разных слоев, одно домен, другое презентейшн/аппликейшн

>usecase
>repository
Как и юзкейсы и репозитории, это вообще джва разных слоя (юзкейс это вообще бизнес-термин, правильнее называть это интеракторами)

>adapter
>service
Вот тут ваще кекус, это совершенно разные вещи

>handlers
>controllers
В некоторых гомоархикектурах это тоже разные вещи, но в моём манямирке это одно и тоже.

Бля, а можно мне тоже зп синьки говнаря, раз у вас так всё плохо с архитектурой.
мимо недосинька на питухоне
Аноним 29/10/23 Вск 10:36:31 2898741 1005
>>2898484
Ебать у тебя каша в голове.
Аноним 29/10/23 Вск 11:09:00 2898767 1006
>>2897648
> Как всрато. Неужели нельзя на несколько реп распределить?
На то оно и МОНОрепа. Можно и распределить
> Командам только интерфейс взаимодействия знать надо. Нахуя им остальной код проекта?
Подсмотреть логику, если дока плохая.
Из-за internal случайно не заимпортят
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов