Этого треда уже нет.
Это копия, сохраненная 29 октября 2023 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Go тред №24 go /go/ 2740805 В конец треда | Веб
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)
2 2740844
Все-ли подготовились к тому, что очень скоро придётся уметь писать на Go v.1 и Go v.2? В ожидании переходного периода...
5 2741027

> // Make sure that Foo implements Bar


> var _ Bar = &Foo{...}


Как перестать орать с этого Unterprogrammiersprache?
6 2741244
>>740844
Очень скоро(2 с половиной человека обсуждали в 2018 году). На самом деле в го все хорошо сейчас, и надо просто поправить несколько багов языка и все
7 2741882
>>740844
А зачем ему вторая глобальная версия? Язык уже хорош. Проблемы есть, они решаются. Дженерики завезли, хоть они и не были обязательными. Главное, чтоб всё говно подряд в него не пихали и язык не потонул
8 2741897
>>740844
Уже миллион раз обсуждали, что его делать не будут, шиз
9 2742026
>>741244
>>741882
>>741897
Ага, не будет. Поэтому вторую версию активно пилят на гитхабе. Алсо, у тебя специфический архитектурный паттерн постов без точек в конце, так что не притворяйся глыбой общественного мнения.
10 2742035
>>742026
Очередной шиз не в силах отличить разных анонов.
Алсо, укажи этот активный пилящийся на гитхабе проект)))
А ты по ссылке выше всего пару ишуев за весь 2023 год
11 2742037
>>742035
Ну и дополню чем то, кроме рандомных высеров
https://youtu.be/v24wrd3RwGo?t=1396

Russ Cox - один из основных разрабов
12 2742039
>>742035
Ты в закрытые глянь, специалистъ.
13 2742041
>>742039
Извини, верю больше словам разработчика гошки
14 2742043
>>742041

>пук


Один из пиздеть не будет. Они там про обратную совместимость почти 2 года срались друг с другом.
15 2742045
>>742043
Это не один из, а буквально человек, который внес основной вклад в язык.
Ишуи на твоем гитхабе не более чем рандомный высер других рандомных людей, их создавать если что каждый может, не нужно быть контрибутором
16 2742048
>>742045
А остальные четверо основателей там кофе твоему Коксу таскали? С момента публикации кода не кислое сообщество появилось. Ты можешь дрочить на своего лектора сколько угодно, но гошка уже далеко не внутренний проект гуголя.
17 2742057
>>740805 (OP)
Пидорская хуйня для геев
18 2742077
Какая примерно разница в затратах на сервера node.js VS go?
Понятно, что нода жрет куда больше, но вот если, условно говоря, на ноде нужен один сервер с четырьмя ядрами и 8гб оперативы, то во сколько раз меньше ресурсов нужно будет go? При допущении что функционал и нагрузка +/- одинаковые.
19 2742080
>>742077
В JS треде выкладывали сравнение. При самых синтетических условиях Go не более +10% выдаёт. Гигантам такое интересно, а остальные прост повторяют за ними.
20 2742149
>>740844
ну максимум нужно будет просто перейти на v2 либы стандартной библиотеки вроде math/v2, которую обсуждают.

остальную хуйню завезут специальными флагами и автоматическим переформатированием.
21 2742474
>>742080
Только есть одно но, гошка умеет в мультитред, потому то нода на беке никому и в хуй не уперлась кроме всякой школоты
22 2742501
>>742474
Ржавый тоже умеет, вот только на нём до сих пор пишут лгбт маргиналы. Голанг хорош для микросервисов и жонглирования ими, но рыночек решает в пользу ноды. Отсюда вытекает запихивание её в те направления, где жопоскрип ранее не использовали.
23 2742815
>>742474
На самом деле нода быстрее для прототипирования и MVP, если это не хайлоад, то и на первых этапах жизни стартапа нода лучше т.к. на ней дешевле и быстрее разрабатывать из-за большого количества специалистов. Самое хреновое это взять, например, rust и тогда стартап загнется с вероятностью 90%
24 2743169
slow.Value - это аналог atomic.Value, с двумя ограничениями:

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

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

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

Как такое решать на го?
26 2743224
>>743169

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


ну тут очевидно что снаружи это можно обернуть в rwmutex. требования к тому, сколько может ждать Store не описаны.
внутри мютекса просто https://pkg.go.dev/golang.org/x/sync/singleflight или самописная альтернатива.
27 2743225
>>743224
ну или там внутри обернуть чисто чтение/запись один хуй))
28 2743226
>>743225
хотя не
29 2743517
>>743169

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


ну вот такое тесты проходит например https://go.dev/play/p/idgiLgEFM7d

>не старее последнего Store()


вызова или выхода?
30 2743739
Расскажи про свои проекты, анон. Какой стек, типовые или интересные задачи. Читаю требования к гошникам, поголовно нужен redis, kafka, rabbitMQ? Насколько глубоко нужно разбираться во всем этом?
31 2743745
>>743169
Через канал нельзя решить? Каждая горутина передает канал на запись в в канал батчера, тот один раз читает и пишет в канал каждой горутине?
32 2743787
>>743739
ну это от компании зависит. у нас например отдельная команда занимается инфрой, а команды которые пилят фичи для юзеров тупо используют обёртки от инфры - в идеале у нас тупо обертки, которые предоставляют "кеш" и "очередь". подключать/менеджить/пилить фичи для их не приходится, но на нас задача их правильно архитектурно заюзать, чтобы было масштабируемо, и тут детали (например нагрузка/макс размер сообщения/доступность) тоже учитывать приходится.

>rabbitMQ


это по-моему какая-то устаревшая дохлая никому не нужная залупа, хотя и у всех на слуху. если она в вакухе, то 100% тебе нужно будет поддерживать легаси

>redis


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

>kafka


ну типа паблишим читаем, хз. у нас вся работа завернута в свою обёртку. буквально сделать queue.New() и зарегать хендлеры вроде queue.HandleZalupa(zalupaHandler). ну например надо понимать что накать, а что откладывать. и что можно класть в сообщение, а что не стоит (а тут уже надо понимать отличие кафки от натса или другой хуйни).
33 2743916
>>743787

>это по-моему какая-то устаревшая дохлая никому не нужная залупа, хотя и у всех на слуху. если она в вакухе, то 100% тебе нужно будет поддерживать легаси


Лол, эксперт в треде.
Кролик по сути та же самая хуйня что и кафка с некоторыми отличиями. Та же очередь, точно также используется в продакшене для микросервисов и новые версии регулярно выходят, как раз недавно вышла новая версия erlang и кролик обновили под него, хз откуда ты про легаси взял. Может у вас в конторе раньше был, но по каким-то причинам например слишком много данных весело в очереди и много писалось на диск перешли на кафку, а старое осталось на кролике.
34 2744179
Как бы вы реализовали потокобезопасный счетчик не используя пакет sync?
35 2744212
>>744179
Через каналы наверно, есть горутина, которая слушает и увеличивает его, и есть которые паблишат в канал
мимо нюфаня
36 2744215
>>744212
Через каналы, но каким именно образом?
Паблишат, что именно?
37 2744217
>>744215
Паблишат единичку/нужное число в канал горутины, которая производит увеличение счетчика.
38 2744255
>>744179
ну внутри канала есть мютекс, только он не из пакета sync))))) https://go.dev/play/p/sEjAeCDYq9M
39 2744385
В ахуе с этого чела, чел на удаленке делает лям или чуть больше в месяц!
Купил Порш и Рендж ровер.

https://www.youtube.com/watch?v=1lYPRLkqVS8
40 2744401
>>744385
Красавчик, смотрел его видосы. Пригласите его в тред.
41 2744402
>>744385

>Предварительная стоимость курса "Порше за полгода" - 100 000 рублей.


Как раз кредит отобьет, лол
42 2744430
>>743916
да я хз я с ним не работал, но отец знакомого один раз пришел с работы и сказал что нужно переходить на другую очередь, ничего не объяснил, было какое-то совещание.
энивей на собесе не должны развернуть, если знаеш как хотя бы какой-то очередью пользоваться
43 2746540
Начал пробовать. Подскажите, плз. Есть ли у меня возможность слать сообщения разных типов в канал. Может можно объеденить их как-то? Дженерики нам в этом не помогут? Допустим клиент мне шлёт разные сообщения по tcp, я их обрабатываю и хочу полылать в канал, который читается корутиной, которая уже реализует логику их обработки. Эти сообщения содержат разные данные и, соответственно, представлены разными структурами. Без алгебраических типов данных я иду нахуй с такими идеями?
44 2746665
>>746540
Дженерики больше про устранение бойлерплейта.
Я бы объявил интерфейс I с методом обработчиком, реализовал бы его для каждой структуры и канал объявил с типом элементов I. Ну это если логика для обработки сообщений разная.
Правда придется перед тем как положить в канал определиться в какую структуру писать байтики или что у тебя там передается по tcp. Если не прав, то обоссыте.
мимо-нюфаня
45 2746671
>>744179

>не используя пакет sync?


Разумеется используя пакет atomic!

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

В целом за использование чего-то кроме XADD в прод коде, надо пиздить.
46 2746688
>>746671
Подразумевается использовать каналы и горутины, atomic тоже нельзя

>XADD


это как?
niceaccount5-1665438803539152896-20230604232207-vid1(1).mp4519 Кб, mp4,
726x720, 0:20
47 2746701
>>746688

>использовать горутины нельзя


ну тогда любой инт потокобезопасный
48 2746728
>>746701
Покормлю.
Можно горутины и каналы.
Нельзя sync и sync/atomic.
Анон выше дал правильный ответ.
Встречал реализацию, когда присылают не число, а функцию (команду) инкремента.
49 2748548
>>740805 (OP)
Go настолько же оптимизирован, как C, или он ближе к питону и C#?
image.png183 Кб, 1672x790
50 2748621
Привет. После долгого программирования на Питоне вернулся к Го. Когда открыл папку с гошными проектами сразу появились такие ошибки. При этом сами файлы запускаются отлично (без ошибок). Что это, и как это фиксить?
51 2748774
>>748621
У тебя в одном пакете несколько функций main.
Либо растащи их по разным пакетам, либо удали лишние
52 2749413
>>748548
ну это охуенно зависит от задачи. сишку не обыграть, компайлер тут довольно тупой, чтобы скорость конпеляции была быстрой. плюс ГЦ. но зависит конечно же от программы. если ты конкретную асинхронную программу напишешь тупа на тредах, если в сишке ты не ебёшь как делать грин треды и оптимизировать под асинхронность, то сишка соснёт под нагрузкой по сравнению с гошкой.
усреднённо получше шарпа и тем более петона, за исключением корнер кейсов.
53 2749616
>>749413

>усреднённо получше шарпа и тем более петона, за исключением корнер кейсов.


А еще за исключением более-менее сложной бизнес-логики. Джсоны перекладывать конечно удобно, но строить модели данных с логикой их взаимодействия с только с помощью примитывных структур это величайшая ебля которую можно придумать.
54 2749880
>>749413

>если в сишке ты не ебёшь как делать грин треды


В Си грин треды только долбоебы делают. На сях запускают N нативных тредов и шарят работу между ними. Почитай про тот же Nginx работает с потоками https://habr.com/ru/articles/260065/

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

>>749616

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


И к сожалению гугл это делает.
55 2749957
>>749616
Структуры с методами не покрывают потребность?
Что есть в других языках для построения сложных моделей ?
56 2749986
>>749880

>Почитай про тот же Nginx работает с потоками


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

>запускают N нативных тредов и шарят работу между ними


в такой формулировке звучит так же, как гошка.
если опустить блевотные шахматные альтернативы, то статья тупа про тот же нетполлер в го, только там это главная фича.
57 2750043
А что с работой на этой вашей гошечке в европках?
58 2750776
59 2750777
В Го не бьют по рукам, если не писать геттеры для полей структур в случаях, когда они просто возвращают поле?
60 2750786
>>750777
в го бьют по рукам, если писать геттеры, которые возвращают тупо поле.
61 2750787
>>750786
за исключением случая, когда это нужно для реализации интерфейса
62 2750900
>>749957

>Структуры с методами не покрывают потребность?


Покрывает, но кода дохера получается, повторное использование кода низкое, а дублирования много. Может конечно это у нашего проекта такие проблемы.
63 2751800
>>749616
Структур и функций достаточно чтобы строить сколько угодно сложную хуйню. Функциональный язык, например OCaml, не даст спиздеть. Просто помимо этого язык имеет вменяемую систему типов, нормальный полиморфизм, а не то говно позорное, что завезли в го, алгебраические типы и умный компилятор, созданый учёными.
64 2752588
>>751800
Просто интересно, откуда у залетных в тред такие познания в других языках и при этом опыт применения Го? Ты на OCalm пишешь продакшен код? Или тут 95% студентота, которая приходит с языком на котором лабу1 написала
65 2754108
Анон, посоветуй, как го-вейно обыграть следующую архитектуру:
приложение периодически шлет GET запросы к одному хосту по нескольким урлам, запросами получаются данные и дальше они передаются обработчику, который парсит данные и должен инициировать POST запрос к тому же хосту.
Хочу сделать асинхронное получение и отправку, т.е. развязать операции с GET и POST.
При этом у серверного хоста есть рейтлимит, который известен клиенту.
Думал сделать простую очередь на одном канале, куда worker-ы для каждого урла будут кидать запросы, а обработчик очереди (канала) будет отсылать их серверу и при этом контролировать, что рейт лимит не превышен. Если превышен, то временно приостановать обработку очереди.
Самое простое решение это отдать канал очереди воркерам, которые инициируют GET и POST звапросы, но кажется это не лучшее решение, т.к. каналом владеет одна горутина, а пишут в нее другие. Но в целом закрывать этот канал необходимости нет. Норм подход? Какой вариант еще может быть? FanIn, FanOut в чистом виде не придумал как сюда прикрутить.
66 2754125
>>754108

>Хочу сделать асинхронное получение и отправку, т.е. развязать операции с GET и POST.


зачем и нахуя? звучит как переусложнение на ровном месте.
плюс твоя очередь на канале проебется при любом рестарте
67 2754138
>>754125

>зачем и нахуя? звучит как переусложнение на ровном месте.


Для pet проджекта, хотелось бы реализовать очередь на каналах, чтобы все асинхронно работало. Представим, что сервер готов держать 1000 запросов в минуту от одного клиента, а обработка полученных данных на стороне клиента условно может занимать 5 сек. За это время можно отправить еще несколько GET -запросов + какие-то обрбаотчики могут завершить выполнения и быть готовыми отправить POST. Они могли бы и сами это делать, но нужно тогда как-то шарить значение рейт лимита между воркерами.

>плюс твоя очередь на канале проебется при любом рестарте


это не критично совсем
68 2754190
>>754138

>но нужно тогда как-то шарить значение рейт лимита между воркерами


ну можно https://pkg.go.dev/golang.org/x/time/rate заюзать.
ну т.е. с 5 секундами на ответ, тебе в любом случае придется дохуя горутин делать, чтобы все 1000 rps заюзать. ну ты там упорешься и будет один/N воркеров который делает геты, один/N воркеров для постов и дохуя горутин с вычислениями. и ты можешь еще разные N каждых воркеров поставить, бенчить это, и всё это будет обмазано каналами/вейтгруппами.
или можно сделать так https://go.dev/play/p/O-7MgQV6Iqy и у тебя логика будет тупой и последовательной, с тем же самым количеством горутин
69 2755371
>>752588

>Просто интересно, откуда у залетных в тред такие познания в других языках и при этом опыт применения Го? Ты на OCalm пишешь продакшен код? Или тут 95% студентота, которая приходит с языком на котором лабу1 написала


Писал на нем диплом, реализовывал компилятор функционального языка с системой типов Хиндли - Милнера. А потом свернул не туда. Есть коллега которого из Гугла переманили HFT кодить на OCalm.

Мимо другой анон.
70 2755435
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, который находится в другом пространстве и с другой ссылкой на область памяти?
71 2755515
>>755435
ну смотри например https://go.dev/play/p/eVU3UsPdcSZ

ты сам слайс и не менял, ты менял значения во массиве, на который слайс ссылается
72 2755557
Господа, программачеры, нужна ваша помощь.

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

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

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

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

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

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

Пробовал еще сделать что-то -типа (s[2-1:len(s)/2+1]) но это плохое решение, что как работает с ограниченным количеством символов, если например будет нечетное слово не из 5-ти, а из 7 символов, то выведет три символа, а не два
73 2755607
>>755557

>если нечетное- два символа


два символа откуда? если примерно посередине, то смотри.
для четного берешь индкесы [l/2-1] и [l/2]
для нечетного - [l/2] и [l/2+1] например (или вообще то же самое, что для четных). остальное это научиться в синтаксис сабслайсинга.

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

https://go.dev/play/p/KM848nzqm23
74 2755614
>>755435

>создаётся копия


Схуяли? Не создается, иди читай гайды го для долбаебов, что такое слайсы
75 2755808
>>755515
Почему ссылки отличаются (0xc0000ac018, 0xc0000ac028), несмотря на обращение через поинтер?
76 2755849
>>755515
>>755614
Разобрался. При передаче в функцию создаётся копия слайса, но внутренняя ссылка на массив остаётся прежней. Можно узнать через принтование адреса первого элемента.
77 2755873
>>740805 (OP)
Взялся короче написать что-нибудь для практики и портфолио.
У меня давно витала идея приложухи для небольшого бизнеса, где я когда-то работал.
Ментор посоветовал насчёт проектов

>Можно написать сервис, с crud ручками и БД, редисом и кафкой, чтобы потрогать библиотеки и т.д.


Ну я и начал, там буквально десяток табличек: клиенты, заказы, мастера, услуги, номенклатура ремонтируемых агрегатов, самая такая база. И это чисто апи с ручками, т.е. чтобы это реально работало (а я хочу, чтобы это реально работало), ещё не хватает фронта
А я сам 1сник, сижу тужусь и понимаю, что подобную хуиту в 1с накидать работы на 4 часа максимум и там ещё будет из коробки фронт к этому всему.
Сука руки опускаются и как обычно мысли уровня "а тем ли я занимаюсь блядь?". Скажите, мне просто нужно взять себя в руки или я реально делаю что-то не так и можно лучше (в плане взять проект в котором го реально будет блистать)?
Это не троллинг если чё
78 2755878
>>755873

> А я сам 1сник, сижу тужусь и понимаю, что подобную хуиту в 1с накидать работы на 4 часа максимум и там ещё будет из коробки фронт к этому всему.


Если нужно очень быстро - попробуй https://gobuffalo.io/
79 2755882
>>755873
Найди то, что нельзя реализовать в 1С, и попробуй сделать в твоем приложении
80 2755887
>>755882

>то, что нельзя реализовать в 1С


Способность справляться с большими нагрузками в основном.
Ну и возможность создавать свои индексы в бд в 1с очень порезана, она есть, но через жопу, особенно когда ты хочешь кластерный сделать такой как тебе надо. Это опять же в копилку производительности всей системы в целом.
И возможность без кучи бойлерплейта делать нормальную интеграцию с другими приложениями. В 1с из-за динамической типизации нужно городить кучу верификаторов, конструкторов и прочего безобразия.
А числодробилок в этом конкретном проекте нет.
>>755878
Хм, интересно, погляжу на досуге. спасибо
81 2756790
>>754190
Спасибо, но в твоем примере сама очередь конечна.
В общем сложная тема, согласен, думаю сделаю проще - запущу несколько горутин, которые делают периодические запросы каждый по своему урлу, воркер с обработкой ответа в этой же функции будет. Рейт лимит может быть заюзаю тот, что ты кинул, либо сделаю простой на RW мютексе, либо в первой итерации проекта вообще откажусь от рейтлимита.
82 2756794
>>755849
Еще момент учитывай, что если внутри func_slice использовать append, то массив может быть создан новый и добавляемые элементы не будут добавлены в массив оригинального слайса.
83 2757184
Анон, вынес конфиг своей приложеньки в yaml, создал отдельный пакет, инициализацию сделал через once. Но возник вопрос с инкапсуляцией полей структуры конфига, т.к. поля должны быть видимы вне пакета, иначе оно не анмаршалится. Т.е. в других пакетах можно просто взять конфиг и напрямую поменять поле. Понятно, что никто в трезвом уме делать так не будет, но формально это все же нарушение инкапсуляции и иммутабельности. Можно конечно сделать структуру-враппер, которая ембеддит оригинальную и навесить на нее геттеры, которые возвращают значения полей исходной структуры. В общем как в го реализуется внешнее конфигурирование?
84 2757233
>>757184

>Понятно, что никто в трезвом уме делать так не будет, но формально это все же нарушение инкапсуляции и иммутабельности


это го, привыкай. тут можно io.EOF = nil сделать.
85 2757872
>>757233
Можно и в джаве такое сделать, только там нет не помню необходимости поля класса наружу выставлять
Посоветуйте го-либу для парсинга ямла, где нет такой беды
86 2758140
Такой вопрос: как часто вы используете context.Context? Я не про просто пробрасывание ниже по цепочке вызовов, а создать новый с таймаутом, запустить что-то в бекграунде и т.п.? Какие есть бест практисиси?
87 2758143
>>757872
смирись, чел. иммутабельность в гошке это когда в комменте написано "не меняйте плз".

>Посоветуйте го-либу для парсинга ямла, где нет такой беды


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

>тут можно io.EOF = nil сделать


Так трудно было final поля сделать, а?
89 2758161
>>758140
у нас туда засовываются поля для логирования - в хендлере запихиваешь поля из реквеста, там userID хуе-мое, и все внутренние логи будут с ними.
аналогично этому в мидлваре можно положить что-то.
NotifyContext в main.
при консюминге очереди - явные таймауты, чтобы не застопить обработку на какой-то хуйне.
если у тебя сетевой поход во время открытой транзакции в БД (так делать не нужно еба), то тоже надо быть уверенным, что на него есть таймаут.
контекст от ErrGroup также нужно смотреть когда логично использовать, а когда не надо.
90 2758175
>>757184
>>758143

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



В общем таки пришлось обмазать враппером, который содержит указатель на мутабельную структуру, но вне пакета к мутабельной нет доступа. Олсо, а как обеспечивается иммутабельность полей-слайсов? Т.к. слайс содержит указатель на массив, то даже получив его копию можно заппендить в оригинальный массив, хотя нет прямого доступа к полям-слайсам конфигурации. Возвращаю в геттере новый слайс в который копирую элементы оригинального. Я долбоеб и надо было забить или можно так двигаться в Го?
91 2758199
>>758143

>теперь у тебя конфиг с приватными полями


>а теперь твой код превратился в жаву


ну как бе с одной стороны да, с другой тем самым можно обезопасить от прострела ноги

можно конечно положить болт, и каждый раз при обращении к конфигу извне возращать копию структуры, а не указатель на нее, но тоже как-то ебано копировать всю структуру ради одного поля
92 2758213
>>758199

>ну как бе с одной стороны да, с другой тем самым можно обезопасить от прострела ноги


да никто не будет твой конфиг внутри бизнес-логики менять, нахуй это надо. ну т.е. это вообще не-проблема в реальном коде.
если ты хочешь альтернативный вариант, то просто не передавай свой ямловый мегаконфиг дальше main. все типы/пакеты, которые ты там инициализируешь, тупо должны принимать значения нужных себе опций на вход NewZalupa() вместо общего конфига.

>но тоже как-то ебано копировать всю структуру ради одного поля


нуу будет у тебя приложуха на две наносекунды медленее запускаться и жрать на килобайт памяти больше на старте.
93 2758605
Какого хуя этот ваш Холанг идет искать импорты хуй пойми куда, вместо того чтобы заглянуть в папки из которого я запускаю мейн.го!?????
94 2758722
>>758605
в go.mod модуль как называется?
95 2758750
>>758605
Вангую путь начинается не с ./
96 2759301
>>758750
в гоше нет ./, все импорты имеют абсолютные пути.
97 2759729
>>758213

>да никто не будет твой конфиг внутри бизнес-логики менять, нахуй это надо. ну т.е. это вообще не-проблема в реальном коде.


Ну да конечно. Возьмет слайс с чем нибудь из конфига, отдаст в функцию которая вообще не в курсе что это и откуда и там уже меняет элементы слайса.
98 2759764
>>759729
ну такое только в синхронном коде получится
99 2759855
По какому принципу горутины синхронизируются каналами?

Допустим, у меня в мейне две одинаковые горутины с двумя каналами: 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<

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

Это мне просто повезло получить воспроизводимый результат, или планировщику так дано работать? Или тут вообще не про планировщик, и я сам явно так синхронизировал все?
100 2759865
>>758605
GO111MODULE?
101 2759895
>>759855
короче я почти нихуя не понял из твоего описания. но я бы ожидал примерно такое поведение

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

если ты всегда получаешь один и тот же результат, то возможно оно всё успевает выполниться на одном треде, когда остальные треды спят без работы.
102 2760014
>>759895
Звучит правдоподобно. Про стек глубиной 1 для свержих горутин читал.

> Все кроме одного процессора не имеют работы и засыпают


Видимо так. Но почему...
103 2760718
>>760014
>>759895
Нет идей ни у кого?
image.png405 Кб, 690x1030
104 2762305
Смотрю это чела, очень мощно, 4к баксов в 20 лет.
Основы хорошо объясняет, тоже буду вкатываться на 4к+ баксов. https://www.youtube.com/watch?v=lj4fvjlYgFg
105 2762312
>>762305
Хм, он даже рос с мамой и бабушкой.
Получется двачеры пиздаболы.
image.png22 Кб, 712x275
106 2762555
Анон, есть проблемка с отменой контекста и завершением работы приложения. В общем, использую NotifyContext для своей утилиты, если ловлю сигнал от OS, то отменяю контекст, который по цепочке прокидывается во все горутины и функции.
Есть некий воркер, который по тикеру выполняет функцию, которая может уснуть или так же может быть прервана в случае получения сигнала (т.к. пробрасывается контекст). Проблема в том, что сигнал на прерывание от ОС может быть получен в момент, когда функция searchForPost спит (т.е. ждет либо отмены контекста, либо записи в канал <- time.After). Получается, что функция может быть в какой-то момент отменена и ожидается, что DoWork завершится кейсом с ctx.Done. Но тикер за время сна успевает видимо подкинуть еще элемент и он срабатывает первым, в результате функция searchForPost срабатывает лишний раз в каждом воркере перед самым завершением работы утилиты. Не понимаю пока, какой тут паттерн/антипаттерн, как сделать так, чтобы если контектс отменяется, то все селекты с ним мгновенно завершались (ну или схожее поведение)?
107 2762566
>>762555
ты зафокусился на какой-то супер-редкий кейс, когда тикер и контекст одновременно доступны. селект в этом кейсе выберет рандомный кейс. у тебя скорее всего что-то другое происходит, т.к. отменить контекст именно в момент тика надо умудриться.
что ты можешь сделать - в кейс с тикером добавить проверку if ctx.Err() != nil { return }. но как я и сказал, это супер-редкий кейс и эта проверка тебе 99.99999% не поможет (плюс эта проверка где-то внутри searchForPost должна же уже быть, если оно сетевой поход делает).
108 2762570
>>762566
а хотя я понял, если у тебя searchForPost блочится и не слушает контекст, а за это время тикер тикает, то да, будешь часто получать такое.
109 2762573
>>762555
ну и конечно можно из searchForPost вернуть ошибку при отмене контекста и выйти если err != nil.
image.png24 Кб, 674x334
110 2762590
>>762570
>>762566
Спасибо, проверка ctx.Err() != nil решила проблему. Да весь подвох в том, что searchForPost может блокироваться, т.к. упирается в счетчик рейт лимита сетевых вызовов и просто ждет N секунд до сброса лимита. Хорошо бы еще понять насколько легально и разумно блочить функции, вызываемые внутри селекта и которые могут быть прерваны отменой контекста.
>>762573
searchForPost к сожалению не возвращает ошибки by design, т.к. любой результат ее выполнения считается успешным, а внутренние ошибки просто пишутся в лог. Не хотелось бы ради корректной обработки отмены контекста прокидывать оишбки назад по всему стеку вызовов.
111 2764169
попросили допилить проект на гошке
бля, как же вам наверно хуево жить без перегрузок, я уже заебался
112 2764478
>>764169
Без перегрузок операторов грустно бывает свои числовые типы вроде денег создавать, а перегрузки методов не нужны
113 2764507
>>764478
makeSomeShitInt
makeSomeShitFloat
"Заставь дерьмо всплыть", ичсх, оно всплывает
114 2764856
>>764507
Я привел пример где на практике нужна перегрузка операторов, жду от тебя реального примера где это нужно laba1 не считается
115 2765136
>>764856
Чел блядь я тебе настроение поднять пытаюсь
116 2765241
>>764507
Называется дженерики, и они у нас есть
117 2765876
Даны два канала, из обоих можно прочитать конечную неубывающую последовательность целых чисел. Необходимо объединить два канала в один канал, который так же генерит неубывающую последовательность.
Подзастрял с этой задачей, нашел решение только с промежуточным вычитанием исходных каналов в слайсы и последующей отправкой в результирующий канал.
https://go.dev/play/p/Y7lZmdMnGOU
Вроде и норм, но по памяти накладные расходы и пайплайн по сути блокируется до момента окончания записи в исходные каналы. Можно ли сделать как-то на селекте, без ожидания полной вычитки каналов? А если последовательность условно бесконечная?
118 2765908
>>765876
так же, как два мосива смержить.
читаешь по одному значению из двух каналов. пишешь в выход то, что меньшее (допустим это был канал А). читаешь из канала А, пока он возвращает значения <= значения из Б и кладешь в выход. когда значение попалось больше, то кладеш то большее из Б и читаешь из Б с тем же условием.
119 2768273
Как вы пишете интеграционные тесты (на моках)? Например у пакета есть экспортнутый метод, который под капотом зовет внутренний метод пакета, который под капотом делает http-запроса. URL запроса берется из конфигурационного файла, а за конфиг отвечает отдельный пакет. Про httptest в курсе, но там два пути: либо подставлять в реквест http-клиента URL тестового сервера, либо подменить url у тестового сервера, на тот, чито указан в тестовой конфигурации. Второй подход вроде как рисковый, т.к порт может быть занят на момент прогона тестов. Первый же выходит через какие-то костыли с глобальными переменными и манки патчингом. Бля, хоть свой спринг пиши.
120 2768277
>>768273
Конечно можно конфу передавать в каждый метод через контекст/аргумента (а сам аргумент подставлят ьв тестах), либо написать отдельный конфиг для тестов, но должно же быть что-то проще.
121 2768348
>>765876
Ты реально настолько тупой или просто приколдесы сюда кидаешь?

https://go.dev/play/p/iN5va0LNsH-
122 2768516
>>768348
Зачем этот высер слияния каналов с рандомными интами? Проблема в чтении каналов в определенном порядке, который может меняться в зависимости от поступающих значений
123 2768549
Ребят а вам не страшно что телефон без влагозащиты? Вот ща дождик идет и я чет задумался, а как им пользоваться то на улице?
Надо было брать самсунг а54....
124 2768575
>>768273

>манки патчингом


У нас так тестится.
125 2768611
>>764169
Можешь пщ+ попробовать, там всё есть
126 2768687
>>765876
Я сделал супервсрато, не идеоматично, но зато вроде работает все успешно
https://go.dev/play/p/FfbYtO5fTwV
127 2768714
>>768273

>"""интеграционные тесты (на моках)"""


у тя сложные тесты какие-то.
ну типа если нужен порт, то ты всегда можешь с ретраями подобрать свободный, и если хочешь тестабилити не нужно порт хардкодить/читать из конфига. а вообще если это всё на моках, то нахуй это интеграционный тест
128 2769238
>>768714
Такой проектик, юнит тесты хороши для бизнес логики, когда можно изолированно от других слоев тестировать. А если есть сеевые вызовы внутри логики, то как без моков.
129 2769268
>>769238
если у тебя все сетевые вызовы замоканы, то это не интеграционный тест
130 2769315
>>769268
Скорее это вопрос устоявшейся терминологии. Под интеграциюнными понимают тесты, которые задействуют несколько слоев/модулей приоложения. Например ты хочешь протестировать слой-репозиторий, для этого мокаешь запросы к БД. Тоже самое с сетевыми вызовами. Юнит-тесты это тестирование изолированной функциональности в рамках одного модуля. Например тестирование функции, которая делает какие-то расчет, без сайд эффектов. То, что ты называешь интеграционными это системное тестирование или end-to-end, когда тестируется на стенде. Другое дело, что как в моем случае у меня нет чистых функций практически, все завязано на коннекты.
131 2769329
>>769315
но в моем случае скорее херовый дизайн, т.к. компоненты связаны внутри методов
132 2769357
>>768273
Почему бы не мокнуть http-клиент полностью?
мимошел
133 2770381
У меня есть директория с файлом go.work. В директории есть несколько модулей, которые содержат пакеты. Как мне импортировать пакет components из модуля tables в модуль data?
import "go.work/tables/components" не работает (это гопота предлагала)."tables/components" тоже. "./tables/components" запретили давно.
134 2770688
>>768273

>Как вы пишете интеграционные тесты (на моках)?


Никак. Интеграционные тесты - проверяют интеграцию между разными компонентами. В интеграционном тестировании поднимаются реальные инстансы всех компонентов, максимум можно мокать внешние системы. Но предпочтительней, чтобы у них была внешний UAT.
135 2770735
>>770381
Сам не пробовал, но вот, что предлагают: https://stackoverflow.com/questions/52026284/accessing-local-packages-within-a-go-module-go-1-11
Если используешь модули, то в go.mod модуля data нужно сделать replace модуля tables с указанием локального пути до пакета
136 2770736
>>769315
да, у нас терминология другая.
допустим, у тебя есть тип А с логикой, завязанный (через интерфейс) на тип Б. если ты тестируешь отдельно метод у А, мокая Б, то это юнит-тест, независимо от того, делает ли реальный Б под капотом сетевые вызовы или это тупо какой-то калькулятор. аналогично тесты для репозитория без поднятия БД, т.е. любые тесты без внешних зависимостей это юнит-тесты.
интеграционные - когда нужно поднять бд/редис/очередь и тупо go test ./... не пройдёт. вызовы в другие сервисы по хорошей практике все равно мокаются.
системные/е2е - когда ходим в реальные внешние зависимости.
image.png275 Кб, 1500x1000
137 2770750
че ребята корутины?
https://research.swtch.com/coro
138 2770756
>>770735
->
>>770381
Попробовал, если сделать replace, то пакет импортировать можно как обычно "some/module/pkg"
139 2770758
>>770736
Вы как-то разделяете тесты внутри проекта? Наприме юнит тесты в _test файлы, а интеграционный в _it_test?
140 2770923
>>770758
я обычно разделяю, интеграционные в _integration_test.go (+ билд флаг в них), юниты в _test.go. хотя обычно один пакет не тестируется одновременно юнитами и интеграционными и порой можно видеть интеграционные в _test.go
141 2771033
Почему так?

Отчего он игнорирует y и не аппендит 3 к слайсу
А вот к z аппендит 4
142 2771182
>>771033
Апендит, но затем перезаписывает. Гугли устройство слайса, там у всех 3-х слайсов "под капотом" один и тот же массив
image.png38 Кб, 1328x397
143 2771462
>>770756
Что-то у меня такого фокуса не получается. Как там путь прописать?
image.png34 Кб, 1289x361
144 2771501
>>770756
Распердолил, спасибо за помощь.
145 2771948
>>771033
https://go.dev/play/p/CErOI1HrNXq
И не перетрет, если в результате аппенда будет создан новый массив.
Этот момент в Го напрягает, конечно, если в коде акробатика со слайсами. 10 раз подумаешь, а стоит ли аппендить в этот слайс или создать новую копию. Чому не завести было высокоуровненвые абстракции?
146 2772115
>>771948

> 10 раз подумаешь, а стоит ли аппендить в этот слайс или создать новую копию.


Такая и была цель, чтобы не делать неявно О(n) операции

> Чому не завести было высокоуровненвые абстракции?


Например как?
147 2772213
>>772115

>Например как?


Например как в нормальных языках - List. Который при добавлении элемента растет внутри, но сама ссылка на List остается актуальной. А еще можно сделать 2 интерфейса - mutable и immutable. А ещё можно всякую функциональщину типа map завезти.

Ладно, это я увлекся, это все не говей, ебитесь с кучей бойлерплейта и не жалуйтесь.
148 2772617
>>772213

> Например как в нормальных языках - List


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

> А ещё можно всякую функциональщину типа map завезти.


Уже
149 2772627
>>772617
Нет, чел. Это в с++ ты можешь языковыми средствами реализовать вектор и хештеблицу и любую другую структуру данных. А у вас долбоебы сделали частью языка хэштаблицу, это же уровень php
150 2772651
>>772627

>это же уровень php


В 1с тоже хештаблица часть языка, причем используется везде где в си и go используется struct, потому что в 1с нет структур в привычном понимании, динамикодрисня же.
Причём в доках нигде не написано что это хештаблица, но по контексту можно догадаться.
Эх...
151 2772881
>>772627
а что тебе мешает реализовать хештаблицу языковыми средствами? компилятор гошки на гошке написан, да и язык тюринг-полный
152 2773986
>>772881
Забей, он ментальный инвалид. С таким общаться, себя не любить.
Вот вариант реализации мамы - https://github.com/alphadose/haxmap
153 2774008
>>772617

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


Ты совсем ебанат который вообще не шарит?
Слайс аллоцирует в куче массив, а на стеке указатели на массив, длину и сегмент. Джава или Шарпе будет делать ровно то же самое, только структура указатели на массив, длину и сегмент будет тоже аллоцирована на стеке, что позволяет не ебаться с

>slice = append(slice, newElement)


а просто

>list.add(newElement)


Разница в аллокации памяти мизерная. Массив для хранения данных и там, и там в куче. Ресайзится кратно текущему размеру амортизированное O(n) для тех кто шарит. Нету нихуя у слайсов, каких-то преимуществ перед List.

>Уже


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

>>772627

>А у вас долбоебы сделали частью языка хэштаблицу, это же уровень php


Аутистам у кого Го первый язык, это не понять.
154 2774114
>>774008

> Слайс аллоцирует в куче массив, а на стеке указатели на массив, длину и сегмент. Джава или Шарпе будет делать ровно то же самое, только структура указатели на массив, длину и сегмент будет тоже аллоцирована на стеке, что позволяет не ебаться с


ну вообще-то слайс и на стеке может быть аллоцирован полностью, включая внутренний массив, если он не убегает и ты подходящий размер укажешь.
155 2774116
>>774008
про эскейп анализ чмоха не слышала ничего;):)::):
156 2774365
>>740805 (OP)
Вкатываюсь в го, синтакс более менее освоил
Сейчас начал делать "пет проект". Фантазии нет, делаю абсолютно бесполезную хуйню
Цимес в том, что в моём проекте на Go буквально 40 строк, остальное делает JS. Это вообще норм или рекрутеры скажут что с такими приколами чтобы шёл на js разраба? Ещё планирую прикруть базы данных, но там тоже не сильно сложно
157 2774375
>>774365

>Это вообще норм


Да
158 2774377
>>774365

>Ещё планирую прикруть базы данных, но там тоже не сильно сложно


Обязательно прикручивай, иначе нахуя тебе вообще бекенд?
Чтобы было больше, делай не с гормами, а с чистым sql
Тем более что в проде зачастую так оно и происходит
159 2774400
>>774365
Еще какой нить брокер подключи, например rmq, так же можешь еще подрубить эластик серч.
160 2774435
>>774377
>>774400
Понял, спасибо
Хочу вкатиться на джуна и основной упор сейчас на алгоритмы и структуры данных, а дальше ещё паттерны хотя бы по верхам нужно освоить и всякие kubernetes, docker...
Проект делаю когда есть вдохновение.
161 2774484
>>774365
Сейм стори, тоже вкатываюсь, один сервис почти допилил, планирую еще парочку и интеграцию между ними сделать по rest и черезь очередь, в сумме должно норм быть.
162 2774521
>>774377
В go правда большинсто проектов не использует ORM?
Имел опыт в джаве с этим самым хибернейтом, так и не проникся философией ORM. Чтобы написать, что-то чуть сложнее круда приходится все равно писать sql только через обертки orm-мовские и еще проблема n+1 из коробки. В го с orm такая же история?
163 2774524
>>774435
А почему на джуна? В одном из прошлых тредов советовали перекатываться на мидла сразу с других языков. Или ты без опыта?
164 2774545
>>774524
Без опыта и не профильное образование учитель музыки. Сейчас учусь заочно на программиста параллельно совмещая с работой и заодно готовлюсь к собесам, если меня на них ещё позовут...
165 2774554
>>774545

>учитель музыки


Уроки на фортепьяно даёшь?
Мне бы не помешал ментор типа на одно занятие в неделю-две
166 2774574
>>774545
А зачем из творческой сферы ты идешь в унылое программирование, где придется по 12 часов сидеть за ПК и все свободное время так же заниматься программированием?
167 2774584
>>774574
Подумай
168 2774843
>>740805 (OP)
Удаленка на лям в месяц.
https://www.youtube.com/watch?v=5Fpqf0ZMTPY
169 2775523
>>774114
>>774116
Таки и в C#/Java эскейп анализ тоже есть, и JIT тоже может на стеке аллоцировать. Просто ты мудило, не можешь в контекст.

>10 раз подумаешь, а стоит ли аппендить в этот слайс или создать новую копию.


Подразумевает, что слайс пробрасывается куда-то наружу, явно за пределы эскейп анализа.
170 2775627
>>775523
Твоя мать грязная тупая шлюха. Высрал тейк, обосрабся. Что-то говорит про контактст. Иди дальше на днище работу джейсоны кидать.й
171 2775652
>>775523
и ни слова об эскейпе со стека в цитате. что подразумевается? куда наружу?
172 2775900
>>740805 (OP)
Для особо тупых:
Одна из распространенных жалоб на Go заключается в том, что обработка ошибок слишком многословна. Это абсолютно верно; каждый раз, когда вы видите, что функция возвращает ошибку, вы должны проверить, является ли ошибка нулевой, и правильно ее обработать. Языки, которые используют исключения для обработки условий ошибок, не делают явную проверку ошибок, что часто приводит к хрупким программам, которые плохо справляются с обработкой ошибок. Делая ошибки настолько заметными, Go побуждает разработчиков поступать правильно и создавать более надежные программы.
173 2775951
>>774521

>ORM


Не смей в приличном обществе такое спиздануть - обоссут и переведут в чуханы
174 2776257
>>775900
Усекли?
175 2776629
>>775900
В результате чего имеем всякие MustCompile() и сранье в аутпут при ошибках в шаблоне sprintf.

Насчёт должен обработать, у Джавы есть checked exception. И как показала практика - говно идея, только засирает код. Проще на верхнем уровне ловить панику/эксепшены и писать их в лог.
176 2776841
>>776629
Ваше мнение очень важно для нас
177 2777048
>>776629
Собственно обработка check exception и есть тот самый err != nil
Ошибки "не check" ловится могут на самом верхнем уровне без каких-либо дополнительных усилий, т.е. это и есть своего рода паника.
Я бы не сазал, что явные экеспшены как-то засирают код, другое дело, что конструкции для ловли могут побудить использовать их как условные операторы для разруливания веток кода, что не есть хорошо. Кмк, в Го как раз решена эта проблема, ловишь в defer recover и выполнение на этом функции завершвается в любом случае или в if err != nil, где явно делаешь возврат.где пишешь простыню с резервным сценарием
178 2777277
>>775652

>и ни слова об эскейпе со стека в цитате. что подразумевается? куда наружу?


Очевидно что со слайсом который создан внутри метода и используется только внутри метода не возникает вопросов

>а стоит ли аппендить в этот слайс или создать новую копию


Речь явно идет про слайс который или получен снаружи, или прокидывается куда-то внутрь и непонятно что там с ним дальше будет.
179 2777306
>>777048

>Собственно обработка check exception и есть тот самый err != nil


Только в Джаве можно один раз написать throws ZalupaException, а в Го каждый раз ебаться с
if err != nil {
return nil, err
}

>Кмк, в Го как раз решена эта проблема, ловишь в defer recover и выполнение на этом функции завершвается в любом случае или в if err != nil, где явно делаешь возврат.


panic-recover это и есть throw-catch в чистом виде. Более того его сами авторы Го используют его именно таким образом.
180 2777855
>>777306

>каждый раз ебаться с


if err != nil {
return nil, err
кидай панику, если уверен, что ошибка на самый вверх должна пойти и с жизнью не совместима

Иначе ты все равно будешь писать if err != nil, только используя try catch
181 2777877
>>777306

>Только в Джаве можно один раз написать throws ZalupaException, а в Го каждый раз ебаться с


да не обязательно. для всех функций с ошибками тупо скипаешь ошибку v, _ := zalupa() и когда-нибудь паникнешь. ну и в мейне просто такой же дефер на всё-всё как в твоей джаве))
MARIMARIEN-1672374734833717248-20230624024302-vid1.mp41,9 Мб, mp4,
480x534, 1:30
182 2777881
погодите
а что
а что если

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

а что если... если бы было так что когда пишешь v, _ = ... в кейсах когда err != nil, то это бы приводило к панике?
183 2777999
>>777881
Лучше бы приводило к возврату ошибки, если функция её возвращает, и к панике если нет. И пустой идентификатор уже используется, лучше новый токен взять, например знак вопроса.
Осталось только придумать как добавлять контекст в таком случае
184 2778086
Как же тошнит от джавы, но это говно еще хуже. Неужели анальники не могут родить какой-то нормальный язык программирования.
185 2778089
>>777855

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


Увы и ах, код-ревью не пройдет. Паниковать можно только в ситуациях инициализации на старте и тестах. В нормальном режиме паниковать нельзя. Пример их жизни, парсим строку регуляркой \d+, потом ее Atoi в число. Понятно что не должно быть ошибки, но тем не менее код-ревью завернули. Нехер паниковать в прод коде.

>>777877

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


В джаве можно ловить ошибку, а потом ее тупо перебрасывать с сохранением стектрейса, в Го - хуй вам. Бросай новый и ебись с логированием старого стектрейса. В фреймворках у тебя нет майна, есть минимальный контроль над обработкой ошибок.

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

>>777999
С одной стороны да, можно уменьшить боейлерплейт, а с другой будет отсутствовать дополнительная ишва. Напримиер ты в 3-х местах ты читаешь из базы и у тебя появляется DB: syntax error, как понять где?
186 2778896
>>778089

>Увы и ах, код-ревью не пройдет.


Весьма странно
В том же effective go приводится пример когда с паникой прокидывается ошибка с кастомнын типом (аля MyCustomErr extends Runtime Exception)
В defer получаешь из recover ошибку и чекаешь тип, если кастомный, то обрабатываешь, если нет, т опаникуешь дальше
https://go.dev/doc/effective_go#errors
187 2780272
>>778896

>В том же 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.


У нас тоже можно паниковать в ините если критичная проблема, а вот панику в методе библиотеки мне завернули, хотя по идее она и не должна в нормальной ситуации произойти.
aBn1pA2460s.jpg36 Кб, 460x595
188 2780386
добавят ли классы в голанге в 2.0 или раньше?
189 2780463
Нет ли плагина, чтобы в VS code создавать заглушки для методов типа, который имплементит интерфейс?
Может это все не говей, но в идейке было удобно, когда онасама клепала заглушки методов.
190 2780501
>>780386
Какой функциональности классов тебе не хватает?
191 2780618
>>780501
борьбы
192 2780795
>>780501
Есть почти всё, но реализовано так что куча кода на ровном месте.
Нет конструкторов, поэтому приходится делать тип приватным, объявлять интерфейс включая все геттеры/сеттеры hello Java my old friend и писать New() метод.
На уровне языка нельзя сказать, что тип реализует интерфейс, надо костылить через присваивание.
Нет иммутабельных данных, так что вся надежда на сознательность вызывающего.
Нет нормального наследования, создать базовый класс и чтобы кому надо расширял его нельзя.
193 2780812
>>780795

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


кринж

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


зачем?

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


так это плюс
194 2780860
>>740805 (OP)
А зачем го вообще нужен? Думал для бэка а на деле он чуть ли не для операционок используется
196 2781237
>>780946
Тогда следующий резонный вопрос. Почему у маскота голанга вместо глаз сиськи?
197 2781302
Признавайтесь, как вы на этом говнище пишете?
198 2781520
>>780812

>лол


>чо?


>кек


Типичный гопник.
199 2781522
>>781302

>Признавайтесь, как вы на этом говнище пишете?


За большие деньги иначе бы уже уволился
image.png372 Кб, 459x753
200 2781701
Перекат с жабы - чек.
Как вы пишите интеграционные тесты для репок?
Используете sqlite или поднимаете локальный инстанс целевой базенки?
А схемы БД чем мигрируете?
201 2781786
Насколько кощщунественно делать десктопы с Fyne??
202 2782195
>>781701

>Используете sqlite или поднимаете локальный инстанс целевой базенки?


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

>А схемы БД чем мигрируете?


хз, какой-то отдельный контейнер есть, который накатывает всё.
203 2783474
>>740805 (OP)
Всем привет! Какой сейчас стандартный стэк на Go для бэкенда?
Что брать как фреймворк, какую ORM, структура проекта итд

Хочу вкатиться с Python/FastAPI/DRF
204 2783541
>>783474

>какую ORM


Скрой тред и удали из избранного.
205 2783568
>>783541
А вы разве GORM не используете?
206 2783581
>>783568
Чтобы через него прокидывать sql?
207 2783632
>>783581
Ну там для примитивных крудов, типа накидал структуру и прикрутил к ней интерфейс, добавил теги или передел в метод хз как у вас там и готово, работаешь со структурой как с таблицей. Или в го такое не актуально и тупо везде голые sql запросы?
Мимо
208 2783798
Есть ли в целом в ГОшке вакансии для челов без предварительного опыта в бэкенд разработке?
Сам занимаюсь бч разработкой на Solidity два года, хочу расширять стек. В бч-сфере преимущественно вижу разработку бэка на ноде, либо разработку бч на той же гошке. Есть, конечно, и разработка на расте, но там смертью пахнет.
209 2783817
>>783798
Ну, гипотетически я какой-то опыт могу наработать в рамках компании, но у нас основной стек всё таки ноде.жс
210 2784670
>>783474
Сам только вкатываюсь, но во что получается по результатам ресерча:
Sql - PostgreSql
No-sql, кэши - redis, MongoDB
Транспорт - kafka, rabbitMQ, grpc
web-фрейворк - gin
Тестирование - пакеты testify, тулза gomock
Контейнеры, облачные сервисы - docker, kuber, aws

Остальное так понимаю покрывается стандартной либой + пакетами от третьих лиц
211 2784842
>>784670
И чем это отличается от питухона/сисярпа/етц, кроме фреймворка и тестов, заточенных под конкретный язык?
212 2784844
>>784842
А должны быть отличия?
бэкенд такой бэкенд
213 2785361
>>784842
Тем что SQL нужно зачастую руками писать + ошибки руками обрабатывать. В общем то и всё
214 2785423
чем golang лучше python/django?
215 2785566
>>785423
Если нет высоких нагрузок, то ничего лучше питона еще не придумали.
А так - компилируемость, статическая типизация, удобная работа с многопоточностью, отсутствие GIL.
216 2785671
>>785361
А в питухоне не нужно скл руками писать, если алхимию не хочется тянуть? Или городить свои экспешн_хэндлеры на каждый сетевой пук?
217 2785761
218 2785766
>>785361
Джангодебил, ты совсем упоролся?
image.png139 Кб, 600x239
219 2786248
>>785423
этим
221 2786411
>>786346
А был бы суслик он бы неплохо так питона порвал
222 2786468
>>783568

>А вы разве GORM не используете?


Мы в Spanner храним proto, нам этот ваш GORM не нужен.
2023-07-28 22.58.24 mondomedia.com 67376c3a5e5f.png383 Кб, 966x648
223 2786485
224 2786951
стоит ли вообще заниматься данным нахрюком программирования? Чем он лучше раста? Какие в нем подводные?
225 2786958
>>786951
до этого был только php и nodejs
226 2787318
>>786951
что ты хочешь получить? ну вот мне язык нравится и еще зп платят. стоит ли не стоит?
227 2787394
>>787318
ну допустим если перекатиться с php+laravel на го то я ничо не проебу?? Деняк побольше дадут?
228 2787412
>>787394

> ничо не проебу


Скорость разработки и не сырые инструменты
229 2787427
>>787412
Ок. чем го лучше раста?
230 2787441
>>787427
У них разные ниши, не совсем правильно сравнивать. Но если так, то го проще намного для разработчика. Ну и он всё же ближе к вебу, а раст больше в системщину
231 2787448
>>787441
Ок. Где больше платят, в системщине или веб??
232 2787451
>>787448

>Ок. Где больше платят, в системщине или веб??


Навинающие в веб больше делают. Но топовые специалисты ценятся в системном программировании.
233 2787454
>>787451
Хорошо, спасибо <3
234 2787523
>>787451

>топовые специалисты ценятся в системном программировании


Следует добавить что для этой хуйни особый склад ума нужен. У меня в кругу буквально пара человек этим занимается, один из них дохуя востребованный спец, года в 23 в Японию в соляного перекатился вообще без проблем.
235 2787576
>>787394
ну гошка это по сути новая пыха. юзкейсов больше, но 99% вакух будет по сути тот же бэкенд.
идти в раст это все равно то же, что уходить в плюсы - графика, системка и те штуки, которые раньше писались на плюсах/сях, чтобы було быстро. так что можешь вернуться на 15 лет назад и подумать куда ты хочешь.
image.png140 Кб, 1226x1270
236 2787809
Может кто объяснить зачем тут len-1? чет слышал что в гошке есть какая-то хитрость с жтим.

https://leetcode.com/problems/contains-duplicate/solutions/2552285/go-multiple-solutions-in-go-golang/
237 2787839
>>787809
Никакой хитрости нет, у массива длины n самый большой индекс это n-1, т.к. первый индекс - 0
238 2787873
>>787809
за тем же, зачем j := i+1 и почему сложность (n-1) * (n-1)
239 2788490
>>787809

>Может кто объяснить зачем тут len-1? чет слышал что в гошке есть какая-то хитрость с жтим.


Нет никакой хитрости в Еошке, это просто алгоритм такой.
Пусть у тебя есть слайс [0, 1, 2, 3, 4] ты берешь первый цикл по [0, 1, 2, 3], а второй по первый + 1.
240 2788496
>>787839

>Никакой хитрости нет, у массива длины n самый большой индекс это n-1, т.к. первый индекс - 0


Там строго меньше, это значит что они итерируются до предвоследнего.

>>788490

>а второй по первый + 1.


а второй от первый + 1 до последний.
241 2788525
>>787576
как-то грустно, что только пыха
Но вроде бы веб/микросервисы в современном мире - это и есть 99% вакух, вне зависимости от языка?
Еще криптостартапы на гошке пилят
242 2788542
>>788525
Можно инфу еще делать (имхо это самое интресное).
243 2788547
>>788542
ифру*
244 2788679
>>788547
Да понятно что ты там пытался сказать, не мучайся
245 2789754
Подскажите как пофиксить,

```
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)
```
image.png309 Кб, 460x595
246 2789760
>>789754
ебани str != nil вместо str != ""
247 2789781
>>740805 (OP)
Вот что заставляет людей писать "err" вместо "error"?
248 2789783
>>789781

>Вот что заставляет людей писать "err" вместо "error"?


var nil = "fuck you!"
249 2789788
>>789754
Ты что-то не договариваешь.

https://go.dev/play/p/Dgxg92n23Ay
250 2789792
>>789783
Ну хорошо, а что заставляет людей писать "var"? Страх, что код не скомпилируется?
251 2789796
>>789788
Спасибо, попробую решить.
252 2789808
>>789796
Походу парсер сожрал скобки, я понял в чем проблема.
Ты неправильно работаешь со строками. Го это тебе не Джава, тут свои оригинальные решения. Строка это не последовательность символов, строка это последовательность байт, которые являются строкой в UTF-8. Соответсвенно str{n} скобки квадратные, а не фигурные это N-ый байт, а не символ. Работать с символами надо по другому.

https://go.dev/play/p/3-PsDpCSDJf
253 2789812
>>789792

>Ну хорошо, а что заставляет людей писать "var"? Страх, что код не скомпилируется?


То что это объявление на уровне пакета. Ты вообще местный йумор не оттдупляешь.
254 2789815
>>789808
Как такие задачи решать, если не знал про всякий utf8 encoding и так далее? Смотреть ответ, а потом аналогичные решать самому?

Какая у тебя зп?
image.png6,2 Мб, 4032x1860
255 2789824
>>789815

>Как такие задачи решать, если не знал про всякий 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.

>>789815

>Какая у тебя зп?


Норм.
256 2789864
257 2789871
>>789792
Смех смехом, но в зависимости от того использовал ты var для объявления переменной внутри функции или сразу присвоил значение может зависит, где именно выделить память, в стеке или на куче. Это конечно байтоебство и душные кишочки, но довольно интересно, т.к. по сути можно писать не читаемый говнокод, который будет оптимальнее работать
258 2789880
>>789871

> но в зависимости от того использовал ты var для объявления переменной внутри функции или сразу присвоил значение может зависит, где именно выделить память, в стеке или на куче


примеры будут?
259 2789881
>>789880
https://youtu.be/kClQ7rM5uBY?t=4882
лень писать, скину на конкретный кусок, в целом видео познавательное
260 2789883
Нужно супер быстро выучить го. Собес на этой неделе. Знаю плюсы и питон. Что посоветуете? Тур прошёл, но литкоды всё равно туго решаю. Забываю элементарные вещи типа области видимости переменых
261 2789884
>>789883
Смотри моковые собесы по го, на русском языке контента часов на 10, гугли ответы на вопросы или просто старайся запомнить.
Олсо, как получил приглашение на собес без коммерческого опыта в го и петов?
262 2789885
>>789884
Спасибо. Не знал про такой контент.

Перевожусь в другую команду внутри компании. Тот же почти продукт только теперь компоненты на го есть. Нашу команду продали партнёрам, а я уходить из компании не хочу. Поэтому собес такой внезапный. Сам в го не хотел
Стикер512x512
263 2790143
>>789883

>Знаю плюсы


>Забываю элементарные вещи типа области видимости переменых

image.png16 Кб, 345x458
264 2790371
Задачка для интересующихся. Какой будет вывод?
265 2790446
>>790371
012 в оба варианта?
266 2790460
>>790446
Нет
267 2790487
>>790371
Ну тащемта первое по нулям если я правильно помню, что конст сайз арреи в гошке не поинтерами идут, пользуюсь хуй пойми да раз в год в лучшем случае, второе будет 012, но только если ты длину вручную модифнешь, аля slice[:3]
268 2790514
>>790487
Правильно. Вкатун?
269 2790517
>>790514
Неделю ток начал изучать, второй язык
270 2790523
>>790517
А первый какой был? Какой на нем грейд был?
271 2790609
>>790523
Питон, ботики всякие максимум писал
272 2790651
>>789881
1. Как сказали в комментах: автор очень косноязычный и некоторые вещи понять нереально. Отношения интерфейс-структура, он очень криво объяснил, на середине отвлекся и часть не договорил. На тему почему часть отношение интрефейс-интрефейс всегда идут в динамике, вообще что-то невнятное промычал что мы типа не всегда это можем знать. А вот вторая часть про аллокации, там намного четче и бодрее. Сразу видно что первую часть он пересказывает, то что читал у других, а второй сам занимался.
2. Это не данность, как он сам сказал все зависит от компилятора - по мере улучшения анализа поведение может меняться.
3. Он вообще не говорил про стиль декларирования := vs var, он говорил про ссылка vs не ссылка, и как влияет разная инициализация полей b.data = new(byte) vs box{data: new(byte)}. Просто он реально не умеет делать доклады и даже простые вещи не может объяснить нормально.

Вообще всю эту хуету можно и самому проверить и убедиться что := vs var влияет ссылка/не ссылка и как потом с этими данными обращаются. https://pastebin.com/jUzaqzRK
Но двощеры предпочтут пересказывать друг-другу одни и те же легенды
273 2790659
>>790651

> и как влияет разная инициализация полей b.data = new(byte) vs box{data: new(byte)}


Никак. Буквально одно и тоже.
274 2790682
>>790659
Дополняю, для культа разницы в объявлении объектов
https://godbolt.org/z/Ka36bvT18
275 2790763
>>790659
>>790682
Какой же ты хлебушек. Чел час распинался про эскейп анализ, когда он работает, а когда нет. Потом приходишь ты и специально возвращаешь ссылку на объект, чтобы компилятор на 100% был уверен, что ссылка утекает. Речь шла именно про случай когда объект используется только внутри метода.

https://godbolt.org/z/YEnxM344c
Вот тут как раз видно, что Dumber1_1 и Dumber1_2 вызывается runtime.newobject() аллокация в куче, а в Dumber2_1 - нет аллокация на стеке.
276 2790796
>>790763

> а в Dumber2_1 - нет аллокация на стеке.


В гошке немного не такие стеки, как принято в нормальныз языках, ну так, к слову.
https://github.com/golang/go/blob/6fe976545d646a3f076a84a7ca22be63df8da718/src/runtime/stkframe.go#L264
277 2790840
>>790651
А есть ссылки на первоисточники? Не помню, чтобы в спеке разжевывалось отношение интерфейс-интерфейс
1689800166260091.jpg26 Кб, 400x400
278 2790855
а вам же все залетные говорили что поинтеры зло а вы их не слушали
279 2790867
>>790855
Зло это НЕпоинтеры. Все должно быть только через поинтеры как в Жабе.
280 2790875
>>790840
Речь о том, как это технически реализовывается, а не поведение. Что будет если есть два интерфейса в разных пакетах, но с одними и теми же методами.
281 2790903
>>790875
Ок, где про это прочитать?
282 2790969
>>742815
У меня есть друг с IQ = 150, и даже ему тяжеловато писать на расте
283 2791273
>>790903
https://github.com/teh-cmc/go-internals/blob/master/chapter2_interfaces/README.md#anatomy-of-an-interface
Но там не очень подробно. Если прям совсем подробно надо, то читай исходники. Благо они в основном на го.
284 2791279
>>790867
В жаве есть примитивные типы. А сколько вальгалу завезут и не ссылочных типов станет ещё больше.
285 2791344
чем го лучше TS/JS?
286 2791498
>>791273
Спасибо
287 2791527
Анон, пишу простенький рест круд, собственно вопрос как правильно обрабатывать кейсы, когда GET или DELETE не находят запись в базе. Например select в гете ничего не нашел, в этом случае репозиторий должен вернуть nil указатель и сервер должен ответить 404?
А если апи не рест и всегда нужно возвращать какое-то значение?
Как во втором случае отличить zero value от не найденного значения?
Например есть структура с тремя int, как отличить 0,0,0 - значение найденное в базе, от такого же но ненайденнго с zerovalue?
288 2791537
>>791527
Не нашел - вернул код 404
ФСЕ

>Например есть структура с тремя int, как отличить 0,0,0 - значение найденное в базе, от такого же но ненайденнго с zerovalue


Ты буквально сам же предложил решение
289 2791566
>>791537
Т.е. в случае nil указатель маршалится в {} или somefield: null?
Чтобы клиент явно мог отличить nil от zero value
290 2791571
>>791566
В случае если ничего не найдено ты не обязан даже null возвращать. Просто возвращаешь респонс с кодом 404 и без body
Разные виды респонсов для разных кодов
image.png12 Кб, 689x142
291 2791649
>>791571
>>791537
Спасибо за ответы и прости за духоту, но спрошу таки, как грамотно вернуть ошибку контроллеру/юзкейсу в случае если не найдена строчка
nil, nil в случае, если не найдена запись норм вариант?
Можно было бы и просто nil, err возвращать, но тогда в контроллере явная зависимость от пакета sql по сути не нужная
292 2791760
>>791649
чел, открой исходники. row.Err чекать даже не надо, оно при scan делается.
293 2791762
>>791760
плюс у тебя горутина утекает если ты выйдешь без scan
294 2791841
>>791760

>чел, открой исходники


Рили, программируем проект всем двачем, лол
Спасибо
296 2793386
>>793322
Чувак из Нигерии и хочет релоцироваться в штаты.
297 2793460
>>793322
Нигер...
298 2793919
Голанг - для свичеров из других языков?
299 2794046
300 2794056
>>794046
Хорошо, что я свичер из других языков
301 2794350
>>793919
Кстати, насчёт свитчеров.
Я понимаю вопрос дебильный, но мож у кого-то просто опыт схожий был.
В общем ща я получаю 2к. Если свитчнусь в го, насколько можно просесть по зп, при условии что я не буду притворяться, что имею коммерческий опыт в го?
Просто прикидываю свои силы, можно ли уже сейчас пробоваться, или надо ещё поднатаскаться чтобы за своего пройти. Хотя с другой стороны я могу просто походить на собеседования и выяснить.
302 2794545
>>794350
Двачую вопрос, насколько реально свичнуться без опыта в Го?
303 2794663
>>794350
Тричую
304 2794693
Видимо никто итт этого не делал...
16911818428690.mp4443 Кб, mp4,
544x960, 0:05
305 2794694
че по шекелям
306 2795108
>>794350
ну просядешь если пойдешь проходить собес на гошке и нихуя знать не будешь.
если будешь на своем языке собеситься то шансов больше))
307 2795114
>>795108
Не об этом вопрос.
Вопрос будут ли пытаться интенсивно пытаться прогнуть по зп ниже 2к если увидят отсутствие опыта в го, даже если на интервью норм справляешься.
Но можешь не отвечать, я уже понял что никто этого не знает.
308 2795172
>>794350
Зависит от твоего опыта. Меня брали без опыта в Го и на большую зарплату. Начиная с некого уровня предполагается, что ты способен выучить язык по ходу.
image.png53 Кб, 1625x244
309 2795273
310 2795289
>>795114
ну я просто один из кейсов описал, который может повлиять. у бэков есть выбор собеситься на гошке или пыхе/паре других языков. если выберешь проходить на гошке, но будешь хуево отвечать, ты потеряешь шанс показать что ты сенёр в пыхе и тебе дадут хуевую оценку. и возможно не найдется команд, которые тебя решат взять.

>я уже понял что никто этого не знает


очевидно, т.к. от компании к компании по-разному.

у нас пыхеров без опыта в гошке часто видно на собесах. сомневаюсь, что их намеренно просаживают - кандидаты тогда просто не будут офер принимать.
311 2795311
>>793919
для гошников, стажеров и свичеров-сеньоров. пробуйте на стажировку попасть, чтобы как этот >>795273 хуй 2 года не мучаться на пыхе с тем же результатом.
312 2795360
>>795311
Ну если ситуация такая, то проще напиздеть
313 2795361
Да и вообще уже похуй как-то.
На всё похуй.
На текущую работу, на следующую.
Лучше бы меня автобус переехал нахуй
314 2795401
>>795289
авито?
315 2795437
>>795311
А миддлов-свитчеров берут сейчас?
У меня джава, могу в асинхрон, в гошный тоже
98441806cd93c5f75c01fb8f5aee343b.jpg52 Кб, 999x1000
316 2795450
hell-yeah-point.gif151 Кб, 220x302
317 2796104
318 2797484
>>796104
И как оно? Проекты интересные, сильно дрочат за производительность из-за хайлоада?
image.png12 Кб, 372x263
319 2797528
Что. это. блять. за. пиздец.

Какому дауну эта хуйня вообще в голову пришла и сколько он перед этим стучался головой об стену?
320 2797537
>>797528
Что конкретно тебе не нравится? Плохой редактор, неправильно подсвечивающий код?
321 2797540
>>797528
otbs давно придумали
322 2797541
>>797537
Почему в вашей обосранной помойке я (программист) не могу юзать индентацию?
323 2797545
>>797540
Но шоб даже не компилировалось на уровне языка - это полный пиздец, нет? Почему какого то петуха волнуют мои базовые привычки?
324 2797555
>>797541
Можешь юзать индентацию, просто открывающая { должна быть в той же строке, что main(). Вероятно, это как-то связано с избавлением от semicolon hell.
325 2797558
>>797555
Нет, не могу, это кор гайдлайн вашего джава скрипта
326 2797564
>>797558
Вроде нормально go run main.go отрабатывает. А на гайдлайн тебе похуй, сам же выше это написал.
327 2797599
>>797564
Гайдлайн я имею ввиду на уровне языка. Как раз да, наверное из-за точек с запятой так делать и нельзя, ору нахуй челам не хватило извилин запилить адекватный парсер исходников и они забанили тупо кодстайл.

Че там у тебя компилируется - я хз, ты может провтыкал автоформатирование или еще что?
328 2797626
>>797599
Ну, мне тоже нравится фигурная скобка с новой строки, потому что так естественным образом отделяется практически пустой строкой название функции от первой строки ее кода. В старых сях такой стиль был. Ну а в современных крестах уже в одну строку пишут. Может голэнгщики просто отдельное правило для парсера не хотели добавлять ради этого, тут стоит только начать, и у тебя уже через некоторое время будет дохуя отдельных правил.
329 2797687
>>797555
this
В го команды отделяются семиколоном, просто он не явно подразумевается в определенных случаях при переводе строки, в спеке есть описание.
330 2797696

> 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!

Извините, я пишу на Го, поэтому немного несдержан.
331 2797701
>>797696
Возвращать сам объект из метода [пере]изобрели в jQuery, то есть в жопаскрипте, чтобы можно было нахуячить цепочку object.method1().method2().method3(). Это решается и другими методами. Хотя я вот сам в крестах такое часто использую, чтобы превратить программирование на крестах в программирование на жопаскрипте, на что некоторые крестолухи ругаются, да и хуй с ними.
332 2797777
>>797696
Это чтобы Builder он был https://pkg.go.dev/io#StringWriter
333 2797800
>>797484

>Проекты интересные


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

>сильно дрочат за производительность из-за хайлоада


от команды к команде, не у всех супер-нагруженные сервисы. на уровне кода обычно байтоебства нет. максимум попросят слайс преаллоцировать, последовательные сетевые походы переделать на параллельные, ну и индексы в бд конечно же.
по большой части надо чтобы архитектура скалировалась и твоя хуйня не стала ботлнеком/не валила флоу пользователя - грейсфул деградировала, асинхронно выполнялась, когда возможно, и т.п. Нагрузку считать, уведомлять смежные команды о планируемом росте рпм, проводить НТ - это приходится.
334 2798186
>>797701

>Возвращать сам объект из метода [пере]изобрели в jQuery, то есть в жопаскрипте, чтобы можно было нахуячить цепочку


Чееееел. Конкретно для стринг билдера этот шаблон с возвратом this использовался и джавой и шарпом, задолго до жс.

>>797777
Какой же охуенный язык Го! Делаем у метода ебанутую сигнатуру, чтобы она соответствовала какому-то интерфейсу в другом пакете. При этом в коде вообще никаких упоминаний об этом интерфейсе. Ну заебись же!
335 2798323
50 просмотров за 3 дня, 10 откликов, 2 приглашения
Отчаиваться рано?
Мимо-свитчер
336 2798354
>>798323
Не вниманиеблядствуй, пуссичека.
мимо вкатун без опыта 0 собесов
337 2798594
>>798186
зачем вам всю вселенную упоминать для каждого типа?
image.png229 Кб, 509x303
338 2798950
>>798594
Если разработчик хочет чтобы тип реализовывал какой-то интерфейс - пусть явно это напишет. А не ебется с
var _ Interface = &Struct{}
и пользователям мозги не ебет а прокатит Foo в качестве Bar?

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

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

ЗЫ У меня последняя версия гошного компилятора.
340 2799489
>>799466
Ты правда думал, что гугл позволит тебе это сделать без отправки на их сервера телеметрии?
341 2799524
>>799466
Не воспроизводиться, у меня билд проходит и без интернета. С какими флагами запускаешь и что выводит? Пробовал go mod vendor?
342 2799680
Завезли функций, гуляем
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.
343 2799711
>>799466

>И это несмотря на то, что все зависимости уже установлены и есть в кэше.


ты уверен, что они все правильных коммитов, которые у тебя в go.sum?
344 2800316
>>799680

>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() на дженериках? Пока не научились ими пользоваться?
345 2800415
>>800316

>на дженериках


Отправляешь туда разные типы и comparable интерфейса, твои действия? А вот с built-in такое можно
346 2800510
>>799489
Какой телеметрии?
347 2800515
>>799524
>>799711
Как воспроизвести:

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 уже и не сделать!
348 2800559
>>800415

>Отправляешь туда разные типы и comparable интерфейса, твои действия?


Ты вообще программировать то умеешь? https://go.dev/play/p/z0DI3dyeWJt если бы был встроенный тип ordered было бы компактней

И не comparable, а ordered. comparable это только равенство, но не порядок.
349 2800645
>>800515

>в который помещаем только hello.go, и пробуем его собрать


ну скопируй go.mod и go.sum и положи рядом и всё
350 2800728
>>800645
Гениально! А зачем вообще было создавать отдельный каталог и помещать туда hello.go, если можно было остаться в том же? Даже перекомпилировать не надо, бинарник-то уже собран!
Это был пример для гарантированного воспроизведения, дурында!

Для тупых: в реальности вместо hello.go может быть другая прога, хотя и включающая те же зависимости (+ другие тоже уже скачанные), но для которой нет готовых go.mod|sum.
351 2801052
>>800728
чел, там всего лишь надо в go.mod указать версии пакетов и оно всё из кеша подтянется. можешь хоть из нескольких разных go.mod накопипастить реквайры. почему тебе go mod tidy не заполняет go.mod последними локальными версиями? ну типа да, могли бы заполнять, но вообще юзкейс редкий и всем похуй. можешь на гитхабе предложить.
352 2801108
>>801052
Не соглашусь. Есть множество случаев, когда может понадобиться скомпилировать программу без интернета.

Кстати, go нужно банить на хостингах за такое насилование сети на каждый чих вместо кэша. Ладно, сейчас на go мало кто пишет и компилит, а если он вдруг станет по-настоящему популярным? Это же ддос-атака на ресурсы типа гитхаба и бессмысленный жор кучи трафика.
353 2801145
>>801108

>Есть множество случаев, когда может понадобиться скомпилировать программу без интернета


И у тебя есть все зависимости для этого в локальном кеше И эту программу тебе поставили без go.mod И ничего в ней не завендорили
354 2801208
>>801108
зеркала есть же, в крупняках по крайней мере
Barney 355 2801521
Сап, вкатываюсь в го в микросервисы и в тулинг.

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

Еще через жопу у меня получается трейсить запросы, и особенно логировать trace ID и span id. Антон, расскажи, юзаете ли вы трейсинг и так ли он необходим
356 2801526
>>801521
Ты видимо с кубером ещё не работал, раз такие вопросы задаёшь. В гошке вся фишка в том, что ты не только бэк пишешь, но ещё и девопсом на 0.75 ставки будешь работать. Морально готовься.
357 2801663
>>801521
не юзаю. ну go-kit где-то там глубоко в зависимостях видел. тулинг-логирование-трейсы-метрики-хуемое у нас отдельная команда делает - частично самописные вещи, частично обертки под уже готовые (потом там что-то допиливает/меняет реализацию под капотом и т.п.). мы просто юзаем то что они предоставляют.
трейсинг юзаю, т.к. у нас дохуя сервисов и чтобы понять что вообще происходит при вызове какой-то ручки это быстрее, чем лазить по коду нескольких реп.
image.png2 Кб, 36x198
358 2802673
>>797528
Говноед будет кукарекать о стиле, фу блядь

В автоформатере го излишни лишь еубищные дедовские выравнивания нахуй не нужные
359 2802808
>>802673
Че ты расквакалась пидорашка зумерская? Нахуй тебе это скобка после выражения? Байты экономишь?
Такой код стайл самый адекватный, сразу +100 к читаемости потому что всё четко видно по блокам и что к чему относится. Жаль что зумерки этого не понимают, ведь они ничего кроме кода своих лаб не видели даже
360 2803281
>>797540
Но форсить его на уровне компилятора, догадалась только в го. Если уж так руки чешутся, то сделали бы в релиз режиме. А то дебажишь код, закомментировал строчку, и переменная не используется иди нахуй.
361 2803286
>>802808
Майкрософтомакака, ты? У тебя мозгов не хватает распознать блок, который начинается не скобкой, а ключевым словом? Я хочу видеть максимальное количество строк кода за раз чтобы не скролить постоянно его туда-сюда. Люблю смотреть как вы пролистываете ваш код с сеттерами и геттерами из одной строки, который превращаются в ёбаную гармошку на весь экран из-за скобок.
Другой анон.
362 2803330
>>803286
Ты ведь в курсе что в нормальных языках скобку на одно выражение можно и не ставить? Ах да, ты же голенговая одебилевшая обезьяна
363 2803469
>>803330
НАЗОВИ МНЕ 3 ЯЗЫЧКА СО СКОБКАМИ КОТОРЫЕ ЛУЧШЕ ЧЕМ ГОЙЛАНГ
364 2803516
Внезапно понял, кто все это время были хейтеры отступов петухона - мс рабы, не могущие забить линию своей уебищной скобкой
365 2803619
>>803469
А почему 3, магический ты человек? Бери выше, любая параша лучше вашего говна где программисту даже кодстайл выбрать нельзя. Странно еще что вам на нем писать разрешают
366 2803622
>>803619
НАЗОВИ СВОЮ ЛЮБИМУЮ ПАРАШУ КОТОРАЯ ЛУЧШЕ ГОЙЛАНГА
367 2803625
>>803622
Kotlin

Дальнейшие вапросики имеются карлито?
368 2803644
>>803625
А ВОТ ПРЕДСТАВЬ ЧТО ГОЙТЛИНА НЕТ. ЧТО БЫЛО Б ТВОИМ ЛЮБИМЫМ?
369 2803646
>>803644
Челик ты очень слабый в троллинге, не пытайся даже, ну не получается у тебя
370 2803647
>>803644
пизда твоей мамки
371 2803651
>>803646
Я СЕРЬЕЗНО
372 2803652
>>803651
Я тоже
373 2803663
>>803652
Но я серьезнее
374 2803782
>>803619

>программисту даже кодстайл выбрать нельзя


программисту вообще нахуй лишнего выбора нельзя давать. пусть пишет то, что нужно, а не всякой левой хуйней занимается.
375 2803794
>>803782
База. Как вообще код этих пидарасов ревьюить, если у них ещё и кодстайл отличаться будет. Хотите творчества - съебывайте из сферы нахуй.
376 2804405
>>770750
Может кто-то пояснить за эту хуйню? Я так понял, что прикол в том, что просто хочется делать встроенные в язык итераторы, а если делать их тупо на каналах без поддержки yield'ов то это будет неэффективно
377 2804726
>>803794

>База. Как вообще код этих пидарасов ревьюить, если у них ещё и кодстайл отличаться будет.


Как во всех нормальных языках делают. Компания выбирает себе кодстайл, пишеи гайдлайны, в CI/CD вставляет запуск верифаера кодстайла. Если компании похй - то все пишут как хотят. Уж точно это не Пайково собачье дело.
378 2804793
>>804726
так это все равно делается. только в кодстайле нет скобочек
379 2805216
>>804793
В каком кодстайле нет скобочек? Что ты вообще несёшь?
380 2805248
>>805216
в гошных кодстайлах про скобочки не пишут, чурек
381 2805311
>>795437
А чтобы что?
382 2805350
>>805248

>в гошных кодстайлах про скобочки не пишут


Иди нахуй унтерменш! Ты вообще не оттупляешь.
https://go.dev/doc/faq#semicolons
383 2805406
>>805311
Чтобы модно молодежно, без привязки к энтерпрайзу и финтеху
384 2805411
>>805350
ну если ты под словом кодстайл понимаешь синтаксис то вопросов нет, намыль веревку и скворечник свой повесь
385 2805495
>>802808
Шарпомакака, только у вас так по ебнутому переносят скобки, потому что индусам в ms построчно платят. Во всех других языках code style примерно как в гошке и линтеры работают примерно также
386 2805497
>>805495
Я не шарпист, ты обосрался олигофреновая обезьяна
image.png203 Кб, 1805x676
387 2806676
>>805411

>ну если ты под словом кодстайл понимаешь синтаксис то вопросов нет, намыль веревку и скворечник свой повесь


Дебил, весь мир по кодстайлом понимает в том числе и расстановку скобок. Иди лучше в мак сортиры мыть.
388 2806678
>>797800
Авито-анон, поясни, плс, за направления в авито для гошников?, какие перспективные, какие интересные. Видел вакансии в области безопасности в том числе, там интересные проекты? Или самый движ в продуктовой разработке?
389 2806716
>>806676
челик, кодстайл это всё то, что ты можешь менять. спек языка это не кодстайл. синтаксис языка это не кодстайл. реализация компилятора это не кодстайл.
390 2806766
Пытаюсь собрать бинариник под андроид телефон.
Установил GOOS=android и GOARCH=arm
Пыфтаюсь собрать и получаю
# runtime/cgo
gcc.exe: error: unrecognized command-line option '-marm'; did you mean '-mabm'?

В GOGCCFLAGS при этом вижу этот -marm но GOGCCFLAGS не меняется по документации. Так как изменить параметр для компилятора? Это делается на стороне Go, на стороне gcc, надо менять какой-то другой параметр?
изображение.png401 Кб, 800x986
391 2806773
СОЗДАЕШЬ ВСЕ ПЕРЕМЕННЫЕ НА СТЕКЕ
@
ВЫКЛЮЧАЕШЬ СБОРЩИК МУСОРА
392 2806933
>>806766
Посмотри в сторону gomobile
393 2806965
Где можно почитать про рантайм го? Желательно по последним версиям и чтобы в одной статье все аспекты были рассмотрены хотя бы поверхностно планировщик, gc, структура памяти, etc.
394 2807094
>>806716

>челик, кодстайл это всё то, что ты можешь менять. спек языка это не кодстайл. синтаксис языка это не кодстайл. реализация компилятора это не кодстайл.


Мне ебучий компилятор не дает спокойно строчку закоментировать, отказывается компилировать потому что переменная/пакет не используется. Хорошо хоть переменные пока дают называть как хочешь. Но чувствую это поправят в новом релизе.
image.png266 Кб, 604x453
395 2807102
>>806773

@
ВОЗВРАЩАЕШЬ ИЗ ФУНКЦИИ УКАЗАТЕЛЬ НА ДАННЫЕ НА СТЕКЕ
@
СЕГФОЛТ, ТАК СЕГФОЛТ
396 2807426
>>806678
я в продукте, насчет безопасников не очень много слышно - обычно то, что они sast/dastы пилят, ну и с аудитами помогают.
максимум движа - в продукте, там всякие аб-тесты, новые запуски и т.п. но я думаю в командах со внутренними продуктами тоже полно интересных задач. энивей можно трансфернуться в другую команду, если поймешь, что тебе не очень и там будет вакуха.
397 2807472
>>807102
Там же не будет сегфолта, просто со временем операционная система прибъет процесс из-за ООМ.
398 2807628
>>807472
После возврата из функции стекфрейм считается неиспользуемым, дальше возможны варианты. В Го стек горутин выделяется на куче, после завершения горутины память могут вернуть ОС, тогда будет сегфолт в текущей реализации, Го никогда не возвращает память ОС. В стек может записать новый вызов функции, сегфолта не будет, но вместо данны будет мусор наиболее вероятный сценарий.
399 2807667
>>806965
Отличный вопрос, рекомендую почитать нигде, ещё можно нигде и в конце обычно всем советуют нигде.
Дельных статей почти нет, на русском просто нет, читай исходники, слушай подкасты гошников, они иногда этой темы касаются. Смотри видосы с конференций по теме, но там зачастую джуниор уровень.
400 2807863
>>781520
Тащемта про наследование он прав. На предыдущей галере большую часть задач наследования решали композированием функционала.
401 2807865
>>807863
>>781520

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


На плюсах
402 2808054
>>797528
Golang - буквально язык программирования Google. Он разрабатывался для решения внутренних задач, и, очевидно, был написан под местный кодстайл.
403 2808067
>>808054
Да норм язык, многопотчку заебись сделоли, каналы дадены - можно любое канкаренси апи реализовать, еба
404 2808069
>>807426
обнял
405 2808277
>>808054

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


В Гугле половина вопросов по кодстайлу решается presubmit check, но другую засунули аж в компилятор. Почему нельзя было всё так сделать?
406 2808801
>>808054
Это очень популярный миф, а точнее пиздеж. Вклад гугла в го там на уровне "мы платили деньги чувакам типа Раса Кокса, которые фулл тайм разрабатывают ЯПы". Целей сделать "язык гугла" у них не было и нет. Хуйня про "нам нужен был язык для дебилов" и прочее тоже очень сильно вырвана из контекста и слов одного конкретного человека.
Более того, ты можешь пойти к любому сотруднику гугла и спросить, как там у них дела и они тебе ответят, что с го у них пиздец и дикий говнокод. И да, половина гугла написана на джаве, половина на плюсах - а оставшиеся проценты делят все прочие языки, включая го.
Даже убер, насколько бы он мне не нравился - намного более "гошная" контора, которая написала тонну софта и которая действительно в промышленных масштабах разрабатывает и поддерживает сервисы на го. хотя их код конечно ну такое, там явно джава головного мозга, не советую
407 2809286
>>808801
а мне понравился их unber fx. Елси его внедририть на весь отдел, то получается очень простой и шаблонный код.
408 2809489
>>808801

>Вклад гугла в го там на уровне "мы платили деньги чувакам типа Раса Кокса, которые фулл тайм разрабатывают ЯПы".


Кто девушку ужинает, тот её и танцует. Да Го не внутренний язык Гугла, но он очень сильно заточен под нужды SRE.

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


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

> Но сам код нормальный насколько возможно для го.


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

>>809286
Это в лучшем случае лучшее из худшего. Куча магии, неочевидного поведения и хаков, чтобы эмулировать нормальные джавовые контейнеры. Для го такой подход чужд.
Но даже если и забыть про всё это - fx тупо плохо написан, я разбирался в их коде в своё время. Это крайне переусложненная надстройка над dig, с абстрактным графом абстрактных опций поверх абстрактного графа абстрактных опций. Авторов явно долго и методично били по голове самоучителем по Java 8. А потом ещё немного повозили лицом по какому-нибудь ООПшному сборнику типа паттернов GOF.
414 2810052
>>810033

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


Ты там работаешь, чтобы так категорично утверждать? Может приведешь пару примеров не идеоматичного кода и гайдлайнов гугла?
415 2810434
Почему когда я вывожу в консоль, buffer.String() выдает последнюю строку и все круто (пик1). Но когда я делаю похожую штуку и вывожу её в html, я получаю говно, весь вывод идет в одну строку (пик3). Я пытался написать \n в буфер или writer, не робит. Как это фиксить? пик4 функция хендлера
416 2810455
>>810434
надо было учить язык программирования html.
думаю ты увидишь все свои переносы, если нажмешь правкой кнопкой и сделаешь View Source
417 2810568
Можете кто-нибудь скинуть ссылку на какой-нибудь гит с небольшой программой на go, но выполненной по всем правилам заебатого кода, про которую сразу можно сказать что чувак шарит?
419 2811204
>>810568
https://www.youtube.com/watch?v=V6lQG6d5LgU
https://github.com/evrone/go-clean-template

это как шаблон, что не мешает в него насрать своим говнокодом, пробуй
420 2811386
>>740805 (OP)

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

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

Короче я не понимаю что простого в GO, в крестах много информации, но всё гораздо проще и прозрачней. Баттхёрт излил - пойду дальше жрать кактус.
421 2811395
>>811386
а поделишься ссылкой на Донавана или где купить pdf?

>добрался до Go Modules


ну там проще, пакетики загрузятся в нужную папку

>Онли пакеты с функциями и готовыми объектами.


юзай чатгопоту, он неплохо разжевывает моменты и экономит время на гугле, но чекай на всякий потом его ответы
422 2811402
>>811386

> учебники либо для опытных программистов, либо для школьников


Учебники всегда непонятные, пока ты не начнёшь проекты делать сам.

>А тут набор кроликов из чёрных ящиков, вот тебе возвращаемые значения, а остальное тебя ебать не должно.


Ну ващет в го можно хоть в исходники самого компилятора залезть чтобы что-то посмотреть, тем более в исходники пакетов (если ты скачал эти исходники). Это ж не 1с.
423 2811411
>>811395

Донован есть на рутрекере, я себе еще книжку купил 20-го года издания, правда судя по всему это все то же издание, отличий я, по крайней мере, не заметил.
424 2811581
>>811395

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

https://dropmefiles.com/pQucF

>>811386

В итоге ещё несколько часов баттхёрта, гугления, кучи созданных новых проектов и директорий - каким-то образом начало работать. Но знаете, что:
1) я не понимаю почему оно начало работать
2) я не понимаю почему оно не работало
Есть подозрение, что изменение произошло после того как я изменил с GO111MODULE = auto на GO111MODULE = on. При этом все старые директории, в которых я инициировал go.mod продолжают не работать. Короче, говна поел, потратил время в пустую, даже не разобрался.
425 2811996
>>811581

>Есть подозрение, что изменение произошло после того как я изменил с 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

426 2812029
>>811996

Я обновлял один раз: была 1.20, вроде, стала 1.21
427 2812431
>>811386
Это какой-то троллинг.
Кресты невозможно выучить и практически невозможно писать на них правильно, спроси у любого достаточно опытного программиста, не являющегося при этом фанатиком.
Кресты охренительно сложны даже на уровне стандартов, а ещё там на каждом шагу UB (гугли UBook, охуеешь оттого, насколько небезопасно в крестах делать что угодно) и ансейф на уровне стандартных библиотек.
Не от хорошей жизни появился раст, не от хорошей жизни появился го.
428 2812443
>>812431

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

Поэтому мне сейчас Go кажется тяжёлым, так как на первый взгляд он выглядит просто как бессистемный набор каких-то решений.
429 2812445
>>812431

Добавлю, что я осваивал только ванильный C++, весь цимес, на изучение которого жизни не хватит, находится в библиотеках.
430 2812479
>>811386
>>812443
Поздравляю, ты только что разницу между коммерческим языком и пустым дрочем. Никто не читает код библиотек, и уж тем более крестовых кроме самих писателей этих библиотек и задротов-велосипедистов. Занятие абсолютно бессмысленное, во-первых, во-вторых, довольно сложное, потому что код плюсов, особенно stl и boost подобных библиотек - очень нетривиальны, требует не только разбирания логики, но и почему именно так написано а не иначе. В плюсах люди не реализуют свои идеи, они блять сидят и дрочат: а что блять там где то и как будет происходить если я напишу свою мысль вот так или эдак? Это абсолютно идиотское занятие. Но зато ты понимаешь как все происходит вон там, и после, правда что уже после после происходит как то не оч(
431 2812516
>>812443
Я отчасти с тобой согласен, го действительно несколько бессистемен. В смысле, многие вопросы в нём или отданы на решение самому программисту (то есть, решаются разными либами), или язык содержит для них пару волшебных хаков.
Но при этом го сильно проще плюсов на концептуальном уровне, этих концепций на порядки меньше. По сути в го есть структуры, интерфейсы и функции, всё остальное - легкие надстроечки. В плюсах и прочих языках этого сильно больше, а ведь потом ещё и начинаются хаки, хаки хаков, хаки хаков хаков и тп. В результате к примеру в плюсах это приводит к тому, что программирование на языке превращается в метапрограммирование на темплейтах, где без поллитра не разберешся. Про арифметику указателей и триллион тонкостей с ними я вообще молчу.
При этом конкретно плюсы страшны тем, что во первых, там до черта вариантов сделать одно и то же немного по разному (какая-нибудь разница между 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.
431 2812516
>>812443
Я отчасти с тобой согласен, го действительно несколько бессистемен. В смысле, многие вопросы в нём или отданы на решение самому программисту (то есть, решаются разными либами), или язык содержит для них пару волшебных хаков.
Но при этом го сильно проще плюсов на концептуальном уровне, этих концепций на порядки меньше. По сути в го есть структуры, интерфейсы и функции, всё остальное - легкие надстроечки. В плюсах и прочих языках этого сильно больше, а ведь потом ещё и начинаются хаки, хаки хаков, хаки хаков хаков и тп. В результате к примеру в плюсах это приводит к тому, что программирование на языке превращается в метапрограммирование на темплейтах, где без поллитра не разберешся. Про арифметику указателей и триллион тонкостей с ними я вообще молчу.
При этом конкретно плюсы страшны тем, что во первых, там до черта вариантов сделать одно и то же немного по разному (какая-нибудь разница между 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.
432 2812646
>>812516

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



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

Ну я не буду спорить, потому что не обладаю ни нужным опытом, ним сформированным мнением.
433 2812729
>>812646
Прочитай дальше.
434 2813024
А есть способ в языке переопределить стандартные математические операции типа + и -? Или только пилить отдельные функции?
Ну как в крестах чтобы
435 2813031
>>813024
перегрузок опервоторов в го нет. и это очень хорошо)
436 2813046
>>812729

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



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

>>812646
Суть не в том, что они переполняются, а в том, что компилятор перехерачит твой код очень своеобразным образом, на чем кстати основана львиная доля хаков и ещё большая доля багов. Захочешь работать плюсовиком - готовься без шуток посвятить всю жизнь борьбе с особенностями компиляторов.
Clipboard01.png46 Кб, 874x653
438 2813794
Всем привет!

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

>>814285
Я честно говоря вообще не понял, что это такое, посмотрю, ок.
442 2814403
>>814380

> Что имеется в виду под репозиторием?


repository pattern. слой который инкапсулирует работу с БД.
https://github.com/golang/pkgsite/blob/master/internal/postgres/postgres.go
443 2814515
>>814172
Я переделал, теперь получше?
Не очень понял про этот репозиторий конечно. Я сделал просто пакет database и сложил туда все операции с бд в общем. Надо ещё пакет создать типа model и туда сложить структуру User? Я прост подумал ну там 2 сточки всего, ладно пусть там с логикой для бд полежит :)
444 2814832
>>814515
по больше части красиво.

глобальная переменная с БД выглядит странно. я бы положил в структуру, методами которой были бы хендлеры.
пакет utils считают антипаттерном, его можно назвать tokens.
юнит-тестов всё еще нет. хотя бы на токены можно сделать.
GetUser/UpdateUser по-хорошему должны контекст на вход принимать первым аргументом.
445 2815322
>>814832
Ну лан, спасибо. Почитал про utils, переименую) Мне уже сдавать надо прост. Тесты там же не говорили писать)) постоянно нихера не тестирую в своих работах, потом жопа подгорает конеш
image.png147 Кб, 1351x220
446 2815518
Ну и чего делать? OpenAPI говорит что date-time должно быть с таймзоной, api считает, что "ну не обязательно". Патчить спеку ну такое себе, патчить _gen.go - no way. Что остается?
447 2815629
>>815518
Забейте, там на каждом шагу такая хуита. Буду патчить спеку.
448 2815828
>>815518
OpenAPI это не говей, говей это ptotobuf+gRPC.
449 2815994
Народ, слыште. Короче я PHP даун, на работе грят учить го, будем перехуячивать микрописюны. Как по быстрому выучить го? Сегодня начал писать сам себе сервис для сокращения ссылок. Ну типа как знаете, для отправления уведомлений на мобилку.

Но там не особо вижу где применять гошную хуйню вроде sync. Так же, у вас блять фреймворки есть сука? Я попробовал gin, хуйня какая-то ебучая. Стал тупо гориллу юзать для роутинга
450 2816196
>>815994

>Стал тупо гориллу юзать для роутинга


молодец

>Но там не особо вижу где применять гошную хуйню вроде sync


ну смотри. вейтгруппы - для параллельных сетевых запросов, например в соседние сервисы. мутексы - если ты там ну например кешируеш в памяти што-то к чему может идти параллельные чтения и запись. для микроговна это по большому счету все юзкейсы.
image.png53 Кб, 590x720
451 2816366
https://go.dev/play/p/sJXz20fJI5d

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

Вопрос:
Гарантируется ли, что в такой реалзиации (пикрил) мы прочитаем число из второй горутины, отправляя его из 1й? Может ли быть так, что мы начнем читать из канала в горутине, которая пишет в этот же канал?
452 2816743
>>816366

> Может ли быть так, что мы начнем читать из канала в горутине, которая пишет в этот же канал?


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

>Гарантируется ли, что в такой реалзиации (пикрил) мы прочитаем число из второй горутины


Если не буферизованный канал - да. Иначе в теории возможно.

Ну и одна из двух горутин утекает при такой реализации, в прод такое не должно попадать.
453 2816744
>>816366

> Может ли быть так, что мы начнем читать из канала в горутине, которая пишет в этот же канал?


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

>Гарантируется ли, что в такой реалзиации (пикрил) мы прочитаем число из второй горутины


Если не буферизованный канал - да. Иначе в теории возможно.

Ну и одна из двух горутин утекает при такой реализации, в прод такое не должно попадать.
454 2817730
Го используется где-нибудь помимо веба? А то это мой первый язык програмирования (хотя вторым и третьим щупал сишарп с жаваскриптом) и думаю есть ли альтернативы для вката.
455 2817773
>>817730
Выбор у тебя между бэкендом и бэкендом. Бэкенд для вебсайтов, бэкенд для энтерпрайзной приложухи.
Смежно можешь ДевОпс посмотреть, но для этого бэкенд опыт все равно нужен.
456 2818374
>>817730

>Го используется где-нибудь помимо веба?


Я видел прикольный iot фреймворк на go https://gobot.io/ Можно писать drone.Event("flying"), gobot.After(3⋆time.Second, func() { drone.Land() } ну и подобное. Думаю вполне под iot и умные дома подойдёт.
457 2818439
>>817730
возьми все юзкейсы питона и убери датасаенс и эксель. получишь примерно то, что есть.
458 2818446
>>818439
или сишарпа и убери геймдев и гуи.
ну или пхп и добавь консольные приложения.
ну или руби и и и я хз че с руби.
459 2818632
Задача:
Основное преобразование указателей:
Напишите функцию, которая принимает целое число, использует пакет unsafe для преобразования его в указатель, а затем обратно преобразует его в целое число.

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

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

Вопрос:
Правильно ли я решил задачу? Где прочитать про то, что высрал чатгпт, потому что я что-то такое слышал в лекции по unsafe про то, что сборщик мусора удаляет ненужные вещи при неправильной работе с Pointer, , но ничего так и не понял
460 2818807
>>815828
В реальном мире бывает вообще только десятки неструктурированных методов без единого формата ответа, какой нафиг protobuf и gRPC
461 2818812
>>818807

>В реальном мире бывает вообще только десятки неструктурированных методов без единого формата ответа


Ну так не работайте в говноконторах.

У нас все через gRPC, один раз задекларировал протокол и потом под любой язык можно сгенерировать клиент и сервер. Да можно все и с помощью OpenAPI делать, но у реста хуже возможности, хуже производительность, хуже производительность сериализации/десериализации. Из плюсов - можно дергать прямо из браузера, т.е. один и тот же эндпоинт можно дергать со странички и других сервисов хотя я с трудом представляю себе такой юзкейс.
462 2818818
>>818812

> будьте богатыми и не болейте


Я нищий фрилансер без портфолио, не от хорошей жизни в этот кал лезу
463 2818846
>>818632
Не знаток этой камасутры с байтами, но предположу, что в своей реализации, ты берешь адрес локальной переменной backAndFourth функции, т.е. в случае когда локальная переменная не сбегает в кучу (возможно при неправильной работе с Pointer), то при присвоении значения переменной внешней функции указатель уже будет ссылаться не на int.
464 2818969
Сложно ли свитчнуться с 3 годами Джавы в го? Берут ли без опыта но со знаниями языка?
465 2819057
Я смотрю тут с Джавы люди перекатываются, интересна мотивация, чтобы что
466 2819063
>>819057
Джава бесит прост, заебало разгребать легаси код на легаси языке. Джава - душное говно, хочется какой-то легкости, глотка свежего воздуха.
467 2819083
>>819057
Очевидно заебались легаси ковырять
468 2819243
>>818632

>к моменту попытки разыменования его указателя он может выйти за пределы области видимости


хуйню морозит этот тостер. из функции int возвращается бля, где там разыменование после выхода?
469 2819372
Анончики, а нет тут случайно тех кто в Ката академи учится на курсе Go? Вроде как по отзывам там лютейшее задротство но выходишь спустя ~9 мес прям очень крепким кандидатом, было бы интересно узнать мнение из первых уст.
470 2819416
>>818818
Ну так и не обобщай тогда

>В реальном мире бывает


по разному.
471 2819778
На всех вакансиях просят на Go коммерческий опыт, как вы свитчитесь?
472 2819848
>>819778
Сейчас везде депрессия и тухляк, при чем тут го
473 2819877
>>819848
Люди свитчатся с Джавы как-то, вот хочу узнать.
474 2819896
>>819877
Я говорю про рынок в целом, сейчас ты бизнесу не нужен если не начнешь приносить деньги уже на следующий день. Поэтому нахуй нанимать чуваков которые будут тупить пол года год пока во все въедут? Никак не свитчатся
475 2819900
>>819896
Понял брат
476 2820036
>>819778

>как вы свитчитесь?


Как правило на сеньорные вакансии опыт в конкретном языке уже не играет роли. Я писал на Джаве, меня собесили на Джаве, а когда вышел сказали учить Го а могли сказать учить С++, смотря в какую команду бы попал.
477 2820067
>>820036
Бля никто бы тебе не сказал учить плюсы, не пиши кринж, "сеньёр"
478 2820108
>>820067

>Бля никто бы тебе не сказал учить плюсы, не пиши кринж, "сеньёр"


Вкатунидзе, не пизди про вещи в которых не шаришь.
479 2820130
>>820036
Очень и очень спорная хуйня. Ситуация, когда тебя нанимают на хз какой язык это пиздец и нормальные конторы таким не занимаются.

Как правило вариантов развития событий два:
1) Тебя сразу нанимают как сеньора в конкретном стеке, скажем в компании основной стек это джава и тогда тебя нанимают как сениор джависта, ожидая, что ты очень хорошо шаришь за jvm, инфраструктуру, бест практисы, экосистему и так далее. Этот вариант самый распространенный и самый же нормальный, потому что будь ты хоть уберсеньором на другом стеке, тонкости ты быстро не выучишь и к ним не приноровишься и первое время будешь на уровне условного миддла.
2) Тебя нанимают в первую очередь как сильного специалиста и готовы заливать тебя деньгами, пока ты не научишься чему они там хотят. Так делают всякие бигтехи типа убера, амазона и прочих. Но даже там тебя не кидают хз куда, в конце процесса найма тебя собесят уже в конкретные команды и на этапе оффера тебе предложат одну или несколько команд. У меня так друг-бекендер пошел писать мобилки за x4 зп.
480 2820136
>>820130

>Тебя сразу нанимают как сеньора в конкретном стеке


Бизнес иногда переписывает весь свой код с языка Х на язык Y, по разным причинам.
Найти сеньора в двух этих языках на рынке труда мало вероятно, проще нанять сеньку в одном из них и доучить на месте.
481 2820144
>>820108
Да ты сам стяни ебало, сеньер помойный. 10 лет тягал джейсоны и тут ему дали задание "плюсы изучи", ты как себе это представляешь чмоха сельская? Ты кто вообще? Выпускник мита в фаанге или че? Смех да и только блять
482 2820164
>>820136
В этом случае тебя будут нанимать или как сеньора(миддла) в языке X, или в языке Y.
Нанимать сеньоров на полную ставку на язык, в котором они не разбираются - это абсолютное расточительство, потому что платить им нужно по сеньорски сразу, сеньорами в новом стеке они станут потом.
Глупо с этим спорить.
483 2820169
>>820130

>Ситуация, когда тебя нанимают на хз какой язык это пиздец и нормальные конторы таким не занимаются.


Гугл и Амазон вообще не указывают язык, Майки указывают просто список типичных языков даже Джава там есть.

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


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

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


Не совсем так. На момент собеседования твоя команда еще не ясна, она будет ясна на момент оффера. У нас вообще несколько языков используется, основной Го, но есть части на Джаве и Питоне.
20230827155006.jpg277 Кб, 4032x1860
484 2820171
>>820144

>Ты кто вообще? Выпускник мита в фаанге или че?

485 2820329
>>820169

> Гугл и Амазон вообще не указывают язык,


и предложением ниже я указал почему

> знание только джавы им тоже ок.


вообще мне не противоречит

> На момент собеседования твоя команда еще не ясна


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

На двачах смотрю ничего не меняется, люди как не умели читать дальше первого слова в предложении, так и не научились
486 2820367
>>820329

>вообще мне не противоречит


А кто писал

>Так делают всякие бигтехи типа убера, амазона и прочих.


не ты? Или ты будешь заявлять что HelloFresh это бигтех?

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


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

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


Дурак, ты сам в контекст не можешь, а на других киваешь.
487 2820380
Вот вам Авито https://hh.ru/vacancy/85709644?from=employer&hhtmFrom=employer
По языку требования

>имеете от 3х лет опыта коммерческой разработки на языке Go либо владеете Python и одним из типизированных языков C/C++, Java, C#;



Если тебя не берут, это потому что ты тупой и ни на что не годный, а не потому что нельзя свичнутся.
488 2820532
>>820380
Конечно, если вакансия весит это значит что им кто то сейчас нужен. Реальность же не такова что твое резюме даже не посмотрят
489 2820613
>>820532

>Реальность же не такова что твое резюме даже не посмотрят


Моё - посмотрят.
490 2820663
>>819778
Пытаюсь свичнуться с начала августа, за все время получил один оффер и 3 приглашения на собес, сейчас подвис второй.
Опыта прямо разработки около 7 лет на разных стеках, последние 3 года энтерпрайз микросервисы на джаве.
HR сами пишут из крупняков, VK, Ozon, Avito, Yandex. От мелких контор 95% отказов, либо просто смотрят резюме. Видимо кто имеет возможность пылесосить рынок и расширяется, те заинтересованы.
Написал пару простеньких петов + решение тестового задания выложил на гитхаб. Что характерно гитхаб никто ни разу не смотрел, хотя ссылка на него и в профиле и в резюме на ХХ.
Лето - обычно тухлый сезон, в отпусках многие.
Если около джуниор, то как вариант попробуй стажировки от крупняков, их обычно в конце лета открывают, чтобы затянуть студентоту, но возрастного ценза как такого нет.
Мне кажется вариант свичнуться есть, но на активный поиск может уйти пара месяцев.
А так разве что крупняки - единственный вариант, у них обычно несколько этапов отбора на которых отсекаются те, кто просто го-тур прошел, могут себе позволить размеряно перебирать.
491 2820729
>>820613
Угу, твое же кладется алгоритмами в отдельную стопку
492 2821688
Как эффективно управлять отменой функции из-за истечения времени ожидания, не сталкиваясь с оставшимися горутинами?

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

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

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

Там был ответ про томб, но там чето все плохо и рандомные паники в рандомных местах
493 2821758
>>821688
Пакет context решает как раз эту задачу
494 2821765
>>821758
Нихуя не решает, горутина doGetSomething все равно зависнет на 50 секунд
495 2821780
>>821765
Тебе нужно в ней обрабатывать контекст. В случае с таймером можно заменить time.Sleep на time.After и делать select по таймеру и по контекст.done. В реальном коде уже смотри по обстоятельствам
496 2821783
>>821765
Ты хочешь чтобы она магическим образом завершилась? С хуя ли она должна? В ней написано спать 50 сек вот она и будет спать и ничего более.

Передавай контекст в doGet... и явным образом программируй ручками завершение функции, если был запрошен кансел.
497 2821818
>>821783
>>821780
Хочу, чтобы был GoroutineKill, а не for цикл с проверкой <-time.After или <-context.Done.
Я просто не понимаю, почему так охуенно придумано, что я должен 150 раз проверять, если ли смысл горутине жить, вместо того, чтобы просто ебнуть её, когда она не нужна
498 2821866
>>740805 (OP)
Как изучить алгоритмы и структуры данных?
499 2821930
>>821818

>Я просто не понимаю, почему так охуенно придумано, что я должен 150 раз проверять, если ли смысл горутине жить, вместо того, чтобы просто ебнуть её, когда она не нужна


Потому что убийство горутины не даёт ей корректно завершить работу. Это у тебя горутина ничего полезного не делает и её можно убить. А в реальном коде могут быть открыты файлы, сеть, базы данных и их надо корректно закрыть. Горутина может держать блокировку и надо её освободить. В конце концов надо что бы горутина была в сейфпоинте иначе могут быть проблемы с памятью.
500 2821948
>>821866
просто будь собой
501 2821951
>>821818
может тебе ще goto вместо if и for?
502 2821979
>>821930
А почему нельзя тогда планировщику сказать, чтобы он снял блокировки и её разъебал, он же их там паркует, создает, убивает и тд. ?

>>821951
goto и так есть, хочешь - пиши через него вместо if/for
503 2822001
>>821866
tl;dr: дрочи литкод
Изучи базовые структуры данных и сложности основных алгоритмов над ними: массив, связный список, хэшмапа, бинарное дерево поиска, куча, стек, очередь.
Из книг рекомендую "Алгоритмы на Java" Седжвика, на курсере есть курс по материалам книжки, записанный автором.
Возьми премиум на литкоде и начни решать easy задачи по базовым структурам. С премиумом у тебя будет возможность посмотреть разжеваное решение, хотя годные с объяснениями встречаются и среди решений других пользователей. Плюс литкода в том, что там иногда приводятся техники решения задач, которые не в каждом учебнике описаны - запоминай их.
Когда освоишься с изи, переходи на медиум, порешаешь задачи на динамическое программирование жадные алгоритмы, научишься комбинировать разные приемы работы с базовыми структурами в одной задаче,
Этого должно хватить даже для ФААНГА.
504 2822015
>>821979
Как ты себе это представляешь? Для планировщика горутины это черные ящики, которые находятся в некотором состоянии или намереваются перейти в одно из этих состояний, он оперирует ими исходя из этих состояний. Планировщик не знает, что именно делает горутина и можно ли ее прихлопнуть не дожидаясь завершения. Горутины завершаются сами собой или прерываются паникой.
505 2822112
>>821979

>А почему нельзя тогда планировщику сказать, чтобы он снял блокировки и её разъебал, он же их там паркует, создает, убивает и тд. ?


Потому что блокировка это не какая-то сущность рантайме, а просто тип который реализует некий функционал. Или вообще блокировка в другом месте, например ты создал WaitGroup(5), запустил 5 горутин и делаешь Wait(), а горутины должны вызвать Done(). Или ты вообще дохуя умный и написал свой спинлок. Или как по твоему планировщик должен понять, что надо конект к базе закрыть?

В джаве у класса Thread был метод stop() но его отключили именно из-за того что нельзя безопасно освобождать ресурсы. В C# аналогичный метод тоже задеприкейтили.
506 2822115
>>822001

>Этого должно хватить даже для ФААНГА


В ФААНГах самое сложное это behavioral interview.
507 2822386
>>822001
Спасибо дружище
508 2822611

>go: homebot/pkg/storage/sqlite imports


> modernc.org/sqlite tested by


> modernc.org/sqlite.test imports


> modernc.org/tcl: modernc.org/tcq\mlANUSvH1t1PUNCTUM1H$h5.2: reading >https://proxy.golang.org/modernc.org/tcl/@v/v1.15.2.zip: 403 Forbidden



Петушиный мув петушиной конторы
509 2823361
>>822611
Без : на конце всё нормально качается.
510 2823934
>>823361
Не качается, это тупой блок по ip/подсети.
511 2824210
Я тут писал раньше >>813794
Они вот сейчас посмотрели задание и написали, что я иду нахер по причине "Для обновления токенов не нужен токен доступа, что делает выдачу access токена бессмысленным."
Вы не могли бы пояснить, а то я не понял, что не так сделано, мне прост интересно. Типа нужно access проверять для рефреша тоже?
512 2825417
>>824210
Возможно, имеют в виду, что нужно передавать пару accessToken + refreshToken для рефреша. В условии задания сказано, что access и refresh токены обоюдно связаны. Т.е. нужно как-то эту связь на беке проверить, например использовать accessToken как "соль" для вычисления хэша рефреш токена, который ты в БД сохраняешь в привязке к юзеру. Тогда, при рефреше будет условно гарантировано, что пара токенов из запроса принадлежит конкретной сессии пользователя.
Но это как-то все равно не повышает секурности, т.к. скорее всего спиздят оба токена, если есть риски на клиенте или соединение дырявое.
Например у того же реддита для рефреша нужен только рефреш токен
https://github.com/reddit-archive/reddit/wiki/OAuth2
Возможно, оба токена в БД хранят, лол.
513 2825433
>>740805 (OP)
Подскажите лучшие практики по написанию микросервиса под прод.
Gin + Gorm всё ещё торт? Ну и чтобы поменьше ёбли было с тестами, есть ли какое-то фримворк или всё ещё руками пишете?
Обязательная поддержка .env файликом, чтобы была среда .env.test .env.local .env.prod(stage) итд итп

Раньше вот как-то писали директории /project/cmd/api/main.go, какая сейчас структура проекта?
514 2825887
>>825417
Спасибо
515 2826226
>>825417

>Но это как-то все равно не повышает секурности, т.к. скорее всего спиздят оба токена, если есть риски на клиенте или соединение дырявое.


Это может повысить секурность, если рефреш лежит в отдельном сервисе рефреша токенов. И когда у основного приложения протухает аксес токенов, оно идёт в сервис рефреша с протухшим токеном, и тогда рефреш уже с двумя токенами рефрешит аксес. Таким образом ни один сервис не хранит у себя 2 токена и злоумышленнику надо спиздить 2 базы.

>>824210
Что-то ребята совсем ахуели. Мало того что такие вещи джунам задавать, так ещё и требовать догадываться о таких не явных требованиях. При том что сами т.з. внятно и без грамматических ошибок не могут написать.
516 2826508
>>825433
https://github.com/golang-standards/project-layout
Это не панацея и маст хев, скорее часто употребляемое.
image.png22 Кб, 327x558
517 2826560
>>826508
Я вот чаще вижу api директорию внутри cmd, а так в целом всё так
518 2826563
>>826560
в проекте может быть несколько api директорий, хз что ты имеешь в виду.
у нас например в /api хранятся ямлы для кодогенерации рестохуйни. а main.go апишки в /cmd/service.
я вполне вижу, что вместо service кто-то называет свой бинарник api, но не представляю кто будет бля ямлы складывать в /cmd/api.
519 2826567
>>826563

>/cmd/service



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

Имхо, DDD для джавадолбаёбов, но как часто меняется коннектор к базе данных? Если я использую тот же Gorm, то зачем создавать репозиторий, если можно круды написать в слое сервиса. Keep it simple
520 2826576
>>826567
Ты хотел сказать насколько? Нормальная практика, на любом языке круд шлепается +- одинаково, зачем изъебываться и придумывать свое.
521 2826662
>>826226
Да лан, там 1к откликов было, ещё и с зарплатой вакансия, офк там будут че-то требовать. Хоть задание прислали и посмотрели даже. обычно прост игнорят.
522 2826921
>>826567

>/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, то зачем создавать репозиторий, если можно круды написать в слое сервиса


да хоть в хендлере. хз насколько тебе удобно юнит-тесты писать только, если репу не прятать за интерфейс чтобы можно было замокать
523 2827361
>>822001
А собственно сейчас в норм конторах алгоритмические задачки при устройстве на Go вакансию просят решать на голанге, или можно хоть на питоне ?
524 2827372
>>827361
На выбор обычно 4-5 языков, которые в компании используются.
Можешь проходить на одном из них, если в маркетплейсы, то скорее всего будет пхп, если в финтех, то вместо php java.
Но алгосекция возможно вообще на любом разрешат, кроме совсем нишевых.
Меня например собеседовал андроиддевелопер, который не знал по сути го, но в целом шарил за алгоритмы и cs.
525 2827691
>>827361
Зависит от компании. Кто-то готов на любом языке, а кто-то хочет посмотреть насколько ты хорошо знаешь Го, можешь ли писать код на бумажке.

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

как контрить эту ебанину когда импортируешь файл из другой папки? Вручную менять пробовал, компилятор слал меня нахуй
527 2828399
А правда, чтобы вкатиться в голанг не нужно поработать на РНР или другом бэкенд-языке?
528 2828428
>>828399
Правда, если пиздеть об опыте работы
529 2828551
>>828395
что ты понимаешь под "импортированием файла"?
530 2828887
>>828551
Ну вот есть у меня в папке cmd файл main.go в нем пишу импорт и ввожу путь к файлу конфига. Точнее когда ввожу cfg := config.MustLoad() то он автоматически указывает путь к файлу config.go но потом прога начинает выебываться как показано выше. Начинаю своими руками вводить путь к config.go - тоже шлет нахуй
531 2829003
>>828887
Пробовал не костылить свои конфиги, а использовать готовую либу Envconfig ?
532 2829073
>>828428
Разве голанг полноценный язык? Я слышал, что на нём пишут отдельные высоконаруженные вставки, а остальное на основном языке.
533 2829075
>>829073
Это правда, хитровыебанную бизнес-логику выносят на отдельные сервисы. Там, где всякая ебань делается в две строчки. Ну это пользовательский ввод, там никогда не нужно быстро что-то решать.
А так да, на голанге у нас был сервер автобиддеров и балансировщик, который 10 запросов в минуту решает, кек
534 2829083
>>828887
какая версия go?
используй go modules, с ними проблем нет, тебе нужно импортировать пакет, а не отдельный файл
import "moduleName/someDir/packageName"
Я тонкостей не знаю импорта, просто создаю под каждый пакет одноименную директорию в проекте и оно работает.
535 2829371
>>829073
Где как. Где-то пишут конкретные высоконагруженные сервисы, где-то всё подряд.
Выносят обычно в случае монолитов на каком-нибудь php или пистоне, где основной язык принципиально тормозной. Та же джава или шарпы сами по себе быстрые и ещё и под конкретный профиль нагрузки тюнятся лучше за счет настройки гц и вынос кода с джавы на го действительно целесообразен довольно редко, или когда код очень прожорливый по памяти и jvm тупо стоит многа деняк, или когда очень нужен мгновенный бутстрап сервиса не дожидаясь, пока jvm прогреется. Чаще всего же переписывают просто из-за технического хайпа, программерам нужно решить проблему тормозов и хочется попробовать новый расхайпленный язык и микросервисы, а тех руководство идёт у них на поводу.
Для написания бизнес логики го подходит, всяким станным людям из интернета здесь на слово верить не стоит. Логика выглядит многословнее и всё такое, но в целом я за последние несколько лет написания на го всякого особых проблем не встречал, любые паттерны и стратегии в целом программируются. Другой дело что лично я подустал уже от всех этих явных проверок на нил и отсутствия той же функции map() в стандартной библиотеке, хочется чего-то поизящнее. Выбрал бы раст, он почти как го, только не настолько примитивный, так ведь особо не пишет на нём никто бэкенды

На мой взгляд у го несколько странная ниша такого себе "С++ для тупых", с одной стороны оно компилируемое и поэтому работает быстро и недорого, а с другой есть гц и планировщик и не нужно приседать с указателями и программированием на темплейтах как в плюсах. С другой стороны, почему бы и нет, те же Badoo всё очень правильно делают. Наняли 300 пехапешников для того чтобы лепить фичи и 50 гошников, чтобы делать для пехапешников инфраструктурные сервисы.
536 2829514
>>829371
Я вот не знаю куда лучше идти: в пхпшники или в гошники.
537 2829620
Вопрос по VS Code.
У меня в папке есть много мелких проектов на го. Хотелось бы с ними работать из корневой папки. Но гошный плагин для вс кода начинает выделываться и пишет ошибку пакета main, из-за того, что проект во вложенной папке. Как сделать, чтобы вс код понимал вложенные папки и не писал об ошибке там, где их нет?
538 2829789
>>829620
ну попробуй разобраться с гошными воркспейсами. может оно просто после go work init в корне заработает.
или как вариант вместо открытия родительской директории добавить все подпроекты в вскодовский воркспейс.
ну или не ебать мозги и просто сделать всё одним модулем.
539 2830343
>>829514
почему не оба? ну то есть смотри гошка не то чтобы за дохуя времени учится, а пыха это почти гарантированное трудоустройство где ты будешь благородно поддерживать легаси, которое через 3 года перепишут на го. ты вполне можешь задрочить пыху и выучить основы гошки, которые на собесах могут спросить. и всегда иметь пыху как запасной аэродром, если не пройдешь на стажировку гошнеком.
540 2830394
Вечер в хату. Nix админ 10+ лет стажа. Хотел в девопс перекатится, изучал так неспешно ансиблы, тераформ и вот это всё, как наткнулся на go, и что то он мне неожиданно пиздец как понравился, я такой кайф последний раз чувствовал когда на Си кодил давным давно. Так то я много на чём кодил(ну как кодил, небольшие тулзы для автоматизации админских задач, в основном на питоне или повершеле, что то более менее серьёзное типо модулей ядра или подобного я в институте давным давно на Си писал) но это прям оче понравилось, структуры эти все, обработка ошибок без трай кетчей. И я вот подумал... а что если не в девопсы а в прохрамисты перекатиться? Но, я никогда в кодеры не метил, за свой 15+ летний опыт в ит, мне из языков только Си нравился, но я обьективно оценивая свой мозг понимал, что я не смогу быть програмистом на Си, т.к. я не настолько умный, кернел хакер из меня не выйдет. Чё щя вообще джуны на голанге пишут, орентировочно? Насколько это вообще хуёвая затея и реально ли перекатиться? На деньги впринципе похер, го я в любом случае дальше изучать буду как замену питона для автоматизации админских задач, просто хочется больше опыта получить и узнать язык получше на практических задачах.
541 2830401
>>830343

>где ты будешь благородно поддерживать легаси, которое через 3 года перепишут на го


В голос с этих фантазий. Уж скорее на джаву перепишут, чем на Го, а более вероятно, что всё так и останется на пыхе.
542 2830453
>>830401
ну я конечно преувеличил, но у нас-то монолит распилили почти
543 2830470
>>830401
Я не он, но это в целом очень популярный кейс, сначала пишут монолит на php, который приносит деньги и всё такое, а потом в какой-то момент упираются в то, что он хуево написан, там уже есть годичные кольца говнокода, это все медленно, неэффективно и тп и начинают переписывать его на микросервисы, и как правило в пару берут именно го, потому что простой и эффективный и не жрет столько же, сколько джава. Кейсов php->го было уже дофига, озон, лямода, авито, тд и тп. А вот php->джава особенно не помню.

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

Но тут ключевое требование это

> _нормальный_ проект на php


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

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

Добра.
543 2830470
>>830401
Я не он, но это в целом очень популярный кейс, сначала пишут монолит на php, который приносит деньги и всё такое, а потом в какой-то момент упираются в то, что он хуево написан, там уже есть годичные кольца говнокода, это все медленно, неэффективно и тп и начинают переписывать его на микросервисы, и как правило в пару берут именно го, потому что простой и эффективный и не жрет столько же, сколько джава. Кейсов php->го было уже дофига, озон, лямода, авито, тд и тп. А вот php->джава особенно не помню.

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

Но тут ключевое требование это

> _нормальный_ проект на php


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

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

Добра.
544 2830473
>>830470

> И максимально беги от любых crm


Тьфу, опечатался. CMS*
545 2830528
>>830394
Программист это ебаное дно и их работу заменяют нейросети, а девопсы это боги с гораздо большей зарплатой
546 2830825
>>830394
У нас в бигтитьке все девопсы что-то пишут из инструментов своих на гошке. Так что забей на макакинг этот, катись в девопсы и потом оттуда можно уже и в сисяны и в инфрастракче девелопмент и прочее.
547 2831722
>>830528
1. зп у программеров больше
2. вакансий у программеров больше
3. любой программер может стать девопсом, потому что мы и так умеем конфиги писать, а вот девопсу чтобы стать программером пришлось бы долго учиться нормально программировать
548 2831797
>>831722
1. Падают вниз
2. Ты категорически не прав, конкуренции на вакансию девопса - 5 человек, на любую программистическую - от 50 до 1000
3. Роль девопса не только конфиги писать
549 2832122
А можно ли самому управлять массивами в плане выделения новых, копирования и т.п.? Или только через слайсы такое возможно?
550 2832325
>>832122
Можно, просто не используй слайсы
551 2832377
>>832325
Но я не знаю как. Везде пишут только про слайсы.
552 2832385
>>832377
У массива фиксированная длина. Всё.
553 2832387
без make у тебя массив будет
554 2832400
>>832385
Дак я могу выделить массив N длины, где N будет известна во время выполнения? Если да, то как?
555 2832406
>>832400
Нет, так нельзя. Пользуйся постоянной длиной массива
556 2832787
>>831797
1. Нихуя, растут вверх
2. Вакансий все равно больше, при этом "конкурируют" с тобой как правило 99% вкатышей со скиллфектори и прочего скама, так что их можно игнорировать
3. Как и везде там много всего, но я занимался админством, для мозга это все равно нативнее чем программирование и переход программеры->девопсы для мозга легче чем наоборот. Не нужно учить новые паттерны мышления, просто учишь новые инструменты да и все. Не говоря уже про то, что как программер я и так и кубы настраиваю периодически, и метрики пишу и смотрю, и тд и тп, так что футуршока у программиста особо быть не должно

>>832122
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. Скорее всего тебе это все не нужно, используй слайсы и не еби себе мозг. В реальной жизни у тебя практически никогда не будет задач, когда тебе реально понадобится
>>832400
6. По гошному скорее всего будет сделать свою структуру type LimitedSlice[T any] { s []T; limit uint64} и самому реализовать для нее операции append, set, тп. и там же проверки на превышение лимита
557 2832877
>>832122
в новых версиях можешь сделать слайс и скастовать к массиву определенной длины, только панику не слови соколок https://go.dev/play/p/zLx99bbgGyR
558 2833179
Можно ли стать профессионалом без IDE GoLand?
559 2833319
>>833179
Нет, без GoLand ты не найдешь сорс код разных либ, поэтому не сможешь стать лучше, смотря на код крутых челов
560 2833434
>>833319
Нах он нужен? VS code отлично справляется вообще со всем
561 2833603
>>833434

>VS code отлично справляется вообще со всем


Хотя бы сохранить значение выражения в переменную и подставить в местах где оно используется, VS Code уже научился?
562 2833648
>>833603
Понятия не имею о чём ты говоришь. Звучит какбудто ты лютый гавнокод пишешь
563 2833823
>>833179
Перекатился с джавы, юзаю дальше Идею, все четко
564 2833960
>>833648

>Понятия не имею о чём ты говоришь


Ты блядь даже бабу IDE не нюхал. Пишешь ты код
if foo.Bar() > 0 {
...
}
Потом ты понимаешь что тебе надо что-то сделать с foo.Bar(). В нормальной IDE ты делаешь introduce/extract variable и у тебя создаётся переменная с значением foo.Bar(), а там где был foo.Bar() вставляется эта переменная. Это простейший рефакторинг, даже переименование сложнее. И его нет в этой убогой VS Code.
565 2834028
Приветствую, эксперты. Вопрос про смену стека: всю жизнь двигал кнопочки на шарпе в впф, а теперь захотелось перейти в бэк на go. Без опыта работы собственно с бэкендом попустят на собеседовании, или достаточно продемонстрировать умение прогать и наличие представления о дизайне систем?
566 2834076
>>834028
Лучше вначале поработать на Асп.нет или РНР годик, а потом переходить на го.
567 2834232
>>833960

>там где был foo.Bar() вставляется эта переменная


Добро пожаловать в мир хардкода и гавнокода. Понял, я тебя услышал.
568 2834649
>>830470
Если челик студент, то нужно сразу в гоху вкатываться.
Авито, яндекс, озон, вайлдберис набирают себе студентов круглогодично.
569 2834678
Хочу перекатиться в Go/Rust, при том, что опыт коммерческий в Го у меня уже был.
Просто когда работу менял, согласился пойти в команду, где Go/Python использовали, при этом зп апнул в два раза. Но в действительности оказалось, что проект - легаси монолит на питоне, с двумя микросервисами написанными на Go сборку, которыми всего лишь один человек занимается.
Сейчас, поработав там уже с начала февраля этого, появилось уйти на другой проект. Причины просты - легаси монолит на питоне плохо поддерживается у нас.
Память течет как не в себя, в произвольные моменты времени начинают течь потоки - периодически с нихуя внезапно возникает 250к системных тредов, которые ложат машинку и ее приходится перезапускать. И куча других проблем. При этом на микросервисы распиливать монолит не особо хотят. Разговоры об этом ведутся, но каждый раз выползает скуфидон-противник микросервисов и начинает доебывать всех вопросами о том, что нам это даст и не проебемся ли с микросервисами, и почему микросервисы это плохо в его понимании.
570 2834680
>>834678

>Память течет как не в себя


К слову эта проблема у нас решается перезапуском.
6 раз в сутки по очереди перезапускаем каждую виртуальную машину.
Когда-то слышал, что в некоторых местах, где жирная джава крутится, перезапускают сервера раз в сутки, так вот у нас на питоне перезапускают 6 раз в сутки.
571 2834956
>>834678

>Python на проде


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

>Rust/go


Отлично зарекомендовали себя в вебе. А голанг это "хуяк-хуяк и в продакшен"
572 2835157
>>834649

> Если челик студент, то нужно сразу в гоху вкатываться.


гхм гхм

> 2) Пыха больше склонна к фрейморкам, что является большим подспорьем для новичка, есть миллион гайдов, примеров "как делать", да и в целом ты работаешь и растешь на какой-то архитектуре. В го же, наоборот, фреймворки не любят и каждый проект собирается в соответствии со взглядами конкретного лида (в лучшем случае) или девелопера (в худшем); Поэтому на пыхе тебе будет и легче, и ты приобретешь больше архитектурного опыта и знания паттернов, для новичков это очень полезно;


> 3) Го это в целом довольно примитивный язык, без негативных коннотаций, просто по факту: в языке очень мало встроенных возможностей, даже дженерики до сих пор каличные; Новичку как правило лучше набраться кругозора и потрогать/посмотреть больше вещей и здесь какие-то более богатые языки подойдут лучше. Хотя бы тайп юнионы научишься использовать, простейшую функциональщину array_map вроде ещё не запретили и прочее;


Удачи начинать с го, а потом по любой причине оказаться вовне и охуеть от непонимания, что делать с трейтами, что такое промисы, что такое observable и тд и тп. В радикальном случае такой студент гошник может не знать, что такое слои, middleware, di и прочую базу, потому что попал на особо "хардкорный" проект
573 2835197
>>835157

> Удачи начинать с го, а потом по любой причине оказаться вовне и охуеть от непонимания


а зачем? годик продержишься и тебя будут звать работать гошником.

>непонимания, что делать с трейтами, что такое промисы, что такое observable и тд и тп


так работа это не образование. нахуй устраиваться писать хуйню, если всё это можно в бэкграунде подтянуть? учитывая што большая часть студентов уже имеет опыт с петоном/плюсами/жавой и разобраться в этой хуйне проблем не составляет. если составляет, то сочувствую конторе, которая таких нанимает
574 2835420
Массив вёдер в карте - это массив или слайс?
575 2835449
>>835420
Граф, дерево или список. Что угодно
576 2835604
>>835449
Почему разработчики го это всё скрыли? Даже в джаве эти конструкции открыты и можно создать свои аналоги. Создали слайсы, но программист на го не может создать свои слайсы, потому что не может управлять массивами.
577 2835615
>>835604
Потому что голанг это про простоту
578 2835885
Небольшой соцопрос:
Инициализацию через init() в пакетах отличных от main выполняют гомосексуалисты или программисты?
579 2835940
>>835885
А что ты предлагаешь? Конфигурирование бинов в xml?
580 2835958
>>835885
нууу там есть юзкейсы, хотя редкие и в 99% случаев лучше сделать var globalA, globalB = initStuff(). на initStuff тесты поудобнее писать

в main это как раз максимально не нужно. в чем проблема засунуть сразу в main?
581 2836202
>>835940
Я ничего не предлагаю, а лишь пытаюсь выяснить делают-ли так. Часто наблюдал, что в программировании не очевидных действий стараются избегать. Инициализация всякого говна в n-пакетов ощущается не очевидно.

>>835958
В некоторых ситуациях импорта (без инита) получаются пустые переменные и твой трюк не прокатит.
582 2836227
Решил давеча попробовать сделать свою игру на ебитене, и я чето так и понять не могу, как мне асинхронно обрабатывать клики/ивенты?
У меня значится была задумка сделать как в юнити InputSystem. Есть ActionMap или чето такое, где мы биндим действия к клавишам и методам с асинхронными колбеками. В итоге накидал примерно такой код.
Все работает, только вот если я слишком часто нажимаю кнопки, то игра жестко фризится, а иногда даже из-за неё зависает комплюхтер, как это можно исправить?
И в принципе я чето не ебу, стоит ли лучше сделать дерево апдейтов объектов и обновлять каждый раз всех потомков, имхо, в конечном итоге это будет очень долго работать
583 2836309
>>836202

> В некоторых ситуациях импорта (без инита) получаются пустые переменные и твой трюк не прокатит.


не понел. оно в одно и то же должно компилироваться.
мне кажется что ты говоришь про ситуации, когда пакет вообще не импортят (например sql драйвер) и смешиваешь кейсы.
584 2836315
>>836309
Я про переменные окружения. Если проебаться с порядком инициализации, то получаешь баги с тяжёлой диагностикой источника. Ну если у тебя не хелло ворлд.
585 2836339
>>836315
ну это уже баг. если он происходит, то явно не надо так делать, и как его решать уже твоя эксперность должна выбрать. если хочешь избежать глобальных переменных, то можно из мейна эти переменные инжектить в сущность. либо пофиксить код пакета.
из интересного, вот такая хуйня например ловится на этапе конпеляции https://go.dev/play/p/75IuKEZa3qE
586 2836538
>>836339
Вот я и хочу все инициализации в одном месте делать, а результаты по пакетам разбрасывать. Т.е. сразу видно все операции и не надо по директориям лазить, чтобы что-то поправить в переменных. Вопрос в том, не говнокод-ли это?
587 2836624
>>835940

>Конфигурирование бинов в xml?


Как будто, что-то плохое.
588 2836628
>>834678

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


Проблема в вашей криворукости, а не питоне. Если вы перепишите на го, ваши кривые руки не выпрямятся.
589 2836999
>>836227
Судя по твоему коду это твой первый опыт. Поэтому хуярь дальше, учись писать горутины. В итоге у тебя игровой движок это как ивентлуп, нажатие кнопок выпускает событие, а обработчик это событие читает. А механизм любой
590 2837030
Начал вкот пару недель назад. Можете скинуть репозиторий или тутор какой нибудь с protobuf+grpc.
Все что смог найти это либо трёхлетнее гавно где половина команд уже устарела либо типичный хелловорлд где пишут только сервер и юзают постман в качестве клиента.
Хотелось бы что нибудь с 2 микросервисами и базовым обменом сообщениями между ними. И чтобы хоть какая нибудь рил-ворлд структура проекта была а не всё свалено в кучу.
591 2837145
>>837030
Я такого не нашёл. В итоге пошёл изучать РНР.
592 2837248
Я уже знаю C++, Java, Haskell, Ocaml хуево. Как быстро ботается Go до уровня "(basic level, simple web servers)"
593 2837273
>>837248
12 месяцев
594 2837572
>>836999
Ну это хуита, потому что разрабы написали, что вообще лучше всего использовать Update, иначе может быть плохо. В итоге я сделал дерево для процессов и для ui (LayerTree, UILayerTree) (инициализация всего этого добра пик1) и обосрался, потому что я не понимаю, что мне делать дальше. Ведь мне нужно из обработчика коллизий внезапно! обработать коллизии и вызывать событие или хотя бы сделать так, чтобы персонаж не мог дальше идти, сталкивался просто.

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

И я вот хз, что мне делать вообще с этим всем.
595 2837802
>>837145
Тоже сейчас на пыху перекатываться буду. По советам из /b/ выучил голанг+питон с соответствующим стеком, а работы для джуна хуй да нихуя. Если го, то обязательно 2-4 года коммерческого опыта, а на питоне только всякое говно с ботами, бустерами, парсерами. В моём миллионнике дико востребована пыха и 1с, плюсом гигакорпорации сишников с жавистами ищут, но там алгосы надо знать хорошо.
596 2837918
>>837030
хотя не надо, вот нашёл лысого который нормально объясняет
https://www.youtube.com/watch?v=D0St2LH158Q
597 2838144
>>834678
>>834680
Я может чего не понимаю, но как память на питоне и джаве может течь? Там же сборщики мусора
598 2838225
>>837572

>И я вот хз, что мне делать вообще с этим всем.


Используй готовые игровые движки не еби мозга
599 2838262
>>838144
Какой-нибудь динамический массив или карта держат ненужные ссылки в себе
600 2838366
>>838262
Понятнее не стало. Это же не течь в памяти, когда отработает сборщик, все это будет удалено
601 2838447
>>838366
Он никогда не отработает, потому что криворукие программисты не отпускают массив или карту. Часто ещё делают её глобальной, т.е. она будет жить, пока процесс не убьёшь.
602 2838669
>>838447
Можно сделать расписание ребутов с доп правилами по потреблённой памяти и проблема решена.
603 2838705
>>838669
Но лучше выпиздить криворуких программистов на мороз.
604 2838711
>>838705
Скорее тебя выпизднут на мороз вместе с предложениями многочасовых ревью. Больше ценятся люди, которые могут прикрутить костыль к вундервафле, чтобы кабаньи фичи быстрее выкатить.
605 2838748
Переписывайте всё на Rust, не будет течь память из-за тамошней mut-ёбы
606 2839017
>>838144
Так же как и в го, не? Не высвободил ресурсы там, где это явно сделать предполагалось
607 2839221
>>740805 (OP)
А есть где-нибудь список с типичными ошибками нубисов? Немного трогал go до этого но мало, сейчас пытаюсь вкатиться полноценным гофером
609 2839407
>>838711
Такой подход работает очень ограниченное время. Проект быстро придёт к состоянию когда вносить изменения в продукт станет сложно, долго и сопряжено кучей багов.
610 2839410
>>839237
Пасибо!
611 2839735
>>839407
пакистанцы доделают
612 2839854
Куда катиться без опыта в го, но с опытом байтоебства в плюсах? Такие шизофреники вообще кому-то интересны?
613 2839907
>>839854
озон/авито/яндексы. очевидно надо уметь в нетворкинг и конкарренси
614 2839933
Скажите, за сколько часов вы бы сделали это тестовое (пикрил1)? При следующей зарплатной мотивации вакансии (пикрил2)
Я себя оцениваю на джуна го, я бы это сделал часов за 8, норм ли такое тестовое вообще?
615 2839949
>>839933
Хотят мидла за ЗП джуна?
616 2839956
>>839933
Часа 4
617 2839961

>норм ли такое тестовое вообще


Задание норм. Но зарплата нихуя не норм. Джунов на голанге не бывает, стартовая позиция хотя бы 150-200к
F5Snd43a0AAL4YAformat=jpgname=orig.jpg255 Кб, 2092x2639
618 2840012
>>839933
ну я бы из интереса сделал, т.к. с голой кафкой и графкюелем не работал. а так да, часов за 8 можно разобраться и накатать. хотя за 100к конечно нахуй надо.
если бы это было задачкой на работе, то 2-3 рабочих дня
619 2840097
>>839933
откуда джун знает как с графкуелем и кафкой правильно работать, а если что и напишет, то все равно мидлу придется все чистить вилкой либо вообще переписывать
620 2840120
Анон подскажи ньюфагу.
Как в net/http передать в функцию хендлера запроса внешний объект (который уже запущен и в фоне выполняет вычисления, вызывать его на каждый запрос не надо, надо просто периодически выводить то что было насчитано в фоне).
В питонячем aiohttp все просто. А тут сложна, сложна и нихуя не понятно.
621 2840138
>>840120
ну ты либо можешь хендлер сделать кложуром и захватить свою зависимость, либо воспользоваться функциями высшего порядка https://go.dev/play/p/LXu2IxkCpR_7 , либо хендлером сделать метод у объекта, у которого есть ссылка на твою зависимость
622 2840148
>>840138
к слову, последний варик наиболее традиционный для реальных сервисов.
у нас под каждый хендлер заводится свой тип с методом Handle, в который через конструктор New передаются зависимости.
623 2840213
>>840138
Но ведь замыкания - это не решение проблемы, а просто перенос её в другое место. Замыкания берут объект не явно из скоупа более высокого уровня, только в данном случае этими неявными будут w и r, а уже искомый объект будет явно. В таком случае с точки зрения концепта это ничем не отличается от не передавать объект ваще = он будет доступен через скоуп общего уровня. Так даже лучше, ибо неявно будет передаваться 1, а не 2 объекта.
>>840148
Спасибо за совет. Так и сделаю.
624 2840302
>>839933
Кажется амбициозно за 8 часов, я бы 24 закладывал, хоть и миддл. Ладно, если бы у тебя был готовый шаблон со всей обвязкой.
625 2840582
Короче, есть реальная возможность вкатиться на стажёра гошника через контору в которой я работаю ща (мне так сказали в конторе что к своим хэары больше присматриваются) в кал-центре. И типа были даже случаи подобные множество.

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

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

Есть какой-нибудь гайд?
626 2841064
>>840582
Всецело одобряю эту портянку: >>839237
627 2841078
Пиздец, смотрю всякие конференции, доклады, презентации от впараши/газона/шмяндекса и 90% контента это вода ебаная.
Половину видоса рекламят свои помойные параши вторую половину рекламят свои курсы, а между этим говорят "мы вот самые быстрые юзаем хттп3, Квик, по нескольку тсп коннекшенов на загрузку файлов, у нас сдн по всей России", но ебаная закешированная страница ВК грузится 20 секунд, на Яндекс маркете каждый товар в выдаче подгружается как картинки по диалапу в 90х.
Причем я не на каком то дальнем востоке или Урале и всякие гуглы/амазоны/фейсбуки грузятся мгновенно. Почему так нахуй.
628 2841516
>>841078
Это ты самую суть айтишного наебизнеса ухватил

>говорят "мы вот самые быстрые"


Так и ты говори
629 2842041
>>841078

>рекламят свои помойные параши


Малыш наконец понял для чего компаниям нужны конференции?
630 2843301
>>839907

>нетворкинг


Не обязательно. В яндексе есть NOCDEV, который на го пишет, но это не единственные гошники в яше.
А вот конкарренси обязательно.
631 2843378
>>841078

>Причем я не на каком то дальнем востоке или Урале и всякие гуглы/амазоны/фейсбуки грузятся мгновенно. Почему так нахуй.


У Гугла все очень хардкорно по веб морде, там чистый С++ с упором на оптимизацию перформанса. Дальше сервисы, там самые употребимые тоже стараются располагаться как можно ближе, куча метрик на перформанс с алертами на его проседание, автоматическое масштабирование сервисов при росте нагрузки. Там понимают насколько важен быстрый отклик. Не можешь быстро вернуть данные - быстро покажи пользователю, что запрос обрабатывается.

А у Амазона инфраструктура говно, у меня видео с amazon.de постоянно подвисает на предзагрузке. Это при том, что я в .de и канал норм.
632 2843884
аноны, есть кто проходил курс Яндекс Практикума Продвинутый ГО стоит ли записаться? или есть альтернатива получше?
633 2843911
>>843884
У них в бесплатном курсе для Го одна вода. Вместо объяснения тем просто дают ссылки на статьи. На весь курс только пара сниппетов с кодом по типу хелловорлд. Ебаную дефолтную документацию не смогли нормально в курс оформить, сомневаюсь что в Продвинутом курсе что то по другому. Просто инфоцыгане.
634 2844095
>>843911
Вот я взялся изучать го 3 дня назад.
Смотрю видосы, делаю серваки по мануалам, но у меня куча вопросов, типо что такое этот writer, что внутри request, как там под капотом происходит принятие/отправка реквеста, насколько оно вообще многопоточно само по себе. Вот могу я просто хэндлеры кидать в горутину? Что с ними вообще делать там можно. И никто это не обсуждает. Все этим просто пользуются.
Только самому сидеть ковырять или где то есть разбор таких вещей?
635 2844105
>>844095
Я тоже помаялся 2 месяца так и ушёл учить РНР, где куча учебных материалов и всё расжёвано.
636 2844113
>>844105
Меня не столько пугает отсутствие материалов, сколько что всем пофиг на это.
Как сделать то-то? Делай вот так.
Почему именно так? ...
Нет ли в работе такой хуйни, что все просто повторяют заклинания по созданию веб сервисов без понятия что реально происходит внутри?
637 2844198
>>844095

>что такое этот writer


интерфейс

>что внутри request


>насколько оно вообще многопоточно само по себе


>Вот могу я просто хэндлеры кидать в горутину? Что с ними вообще делать там можно


заходишь в Jetbrains GoLand -> пишешь хендлер -> go to declaration or implementation, смотришь сорсы
638 2844262
>>844105
Всё правильно сделал. Сервисы на голанке это сборная солянка из гавна и макарон всегда. Нет НИ ЕДИНОГО хорошего фреймворка, как yii Или laravel
639 2844784
>>844113
Какую-то хуиту ты сейчас написал. В стандартной библиотеке все максимально следует стандартам и нет никакой магии совсем. Просто берешь сорсы и читаешь. Специально язык такой сделали, чтобы читалось легко.
640 2846128
>>844784

>В стандартной библиотеке все максимально следует стандартам и нет никакой магии совсем.


Стандартная библиотека написана, в зависимости от того под чем сидел разработчик. В стандартной библиотеке 2 функции сортировки слайсов, у одной функция сравнения возвращает bool у другой int. Почему? Пошёл нахуй, вот почему! А та которая с bool имеет функцию StableSort. Как реализовать StableSort имея только функцию сравнения <=? Лучше тебе не знать сынок.
641 2846216
>>846128

> <=


Так с помощью этой операции можно вывести любую другую.
642 2846692
>>846216

>Так с помощью этой операции можно вывести любую другую.


И увеличить количество сравнений в 2 раза. Ахуенно!

Ну и в целом охуенные решения типа
type Interface interface
Тут И нейминг от бога и сама концепция. В нормальном языке, ты у типа реализуешь функцию compare() а дальше просто передашь массив/список этого типа в функцию sort()/max()/min(). Но это конечно же не говей. Говей это создать тип для слайса, запиздячить туда функцию сравнения и базовые операции для слайсов. Вот тогда то его и можно будет отсортировать.
643 2846815
>>846692
В целом согласен. Удобных структур для повседневного использования не хватает. Писать на каждый массив len less и тд не прикольно.
644 2847435
>>846128
>>844113
Потом такой вот крикун приходит и убеждает всех что вышка нинужна
645 2847517
>>847435
Это посты разных людей
и вышка у меня есть
646 2847560
>>847435
У меня есть вышка на погромиста, но я всё равно не понимаю где брать инфу по го. Вот все дают ссылки только на базовый синтаксис, а как писать полноценные веб-приложения - такого уже нет. А между тем там очень много вопросов: от архитектуры до инструментария.
647 2847583
>>847560
Вся суть """вышки""" программиста. Не позорился бы, вкатун. Любой курсовичок после 9го класса знает инструмент и технологию лучше тебя
648 2847589
>>847583
Курсовичок знает только в пределах изучаемого на курсе. или по какой причине их никуда не берут?
649 2847609
>>847589

>или по какой причине их никуда не берут?


Потому что с 2014го года дефицит программист сходит на нет, сейчас 95% работающих программистов - имеют стаж больше 5 лет. 5% это те, у кого меньше 5 лет.

Нет НИ ОДНОЙ причины нанимать каких-то джунов, стажёров, это всё великое наебательство. Если ты вкатился до 2018го, то ок, можешь осваивать дальше профессию. если ты вкатился во времена ковидного хайпа - то будет смещён с пьедестала более старыми игроками на рынке
650 2847625
>>847609
А как прыгнуть на новый язык сразу на мидла?
651 2847666
>>847625
Быть мидлом-сеньором на текущем и выполнять те же самые обязанности
652 2847730
>>847609
Я постоянно слышу обратное и что новых программистов набирают. Правда не на го, а на другие более ходовые языки типа джавы и РНР. Го действительно самый худший вариант для вката. Ну может хуже ещё раст какой-нибудь.
653 2848313
>>839933

>8 часов


Ты уже явно не джун. Я его 4 дня делал. День писал базу, день на отладку и два дня на тестирование.
654 2848358
>>848313

>Я его 4 дня делал


А зачем?

>День писал базу


А что там за проблема с базой, там одна таблица с фио, возрастом, полом и национальностью
655 2848364
>>848358
Базой я называю всю реализацию, которую на следующий день люто дебажил.

>нахуя


До этого задания я знал только один фреймворк и как его тестировать. Это был стимул прокачаться по знаниям.
656 2848438
>>847435

>Потом такой вот крикун приходит и убеждает всех что вышка нинужна


Или проспись, алкаш. >>846128 вообще не про вышку.
657 2849367
https://go.dev/blog/loopvar-preview

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

алсо тредик сейчас утонет
658 2849647
>>847609

>Нет НИ ОДНОЙ причины нанимать каких-то джунов, стажёров


нуу им можно платить меньше. работают так же, как выгоревшие сеньоры

>Если ты вкатился до 2018го, то ок, можешь осваивать дальше профессию. если ты вкатился во времена ковидного хайпа - то будет смещён с пьедестала более старыми игроками на рынке


я за пару месяцев до локдаунов в 2020 вкатился, сразу в гошку без опыта. увольнять будут? рекрутеры пока сами пишут. за жизнь только по трём вакухам сам написал, когда искал первое место
659 2849648
Комплиятор гохи поддерживает авто векторизацию как llvm?
Есть ли какие-то слухи о переводе го на llvm?
660 2849660
>>849648
что такое авто векторизация 😮
662 2849666
>>849648
Судя по беглому Гуглу нет.
В целом не удивительно.
патчи сам
663 2849687
>>849647

>нуу им можно платить меньше. работают так же, как выгоревшие сеньоры


Нет. Даже выгоревшие сеньоры, понимают что нельзя делать
res, _ := someFunc(...) // no error should happen
потому что он обязательно случится, хоть бы ты 100500 раз проверил аргументы функции. И куча другого говна, которого они наелись за свою карьеру. Сенька не пишет код в N раз больше джуна, он больше думает о последствиях. Чтобы не ёбнуло на проде, а если ёбнет, то хотя бы найти концы в логах. Он понимает, что работа это не про клин код, а про фичи для заказчика, но ты потом это говно поддерживать будешь. Поэтому надо и баланс соблюсти. Что пусть вы 100% договорились с другой командой про сроки и АПИ, но контролировать все равно надо.
664 2849966
Вот пишут, что го всегда передаёт параметры функций по значению, но тут же говорят, что срезы и карты ведут себя по другому. Почему разработчики не унифицировали все типы, чтобы они передавались по значению. К чему эти исключения?
665 2849971
>>849966
Потому что гошка пока сыровата. Ты ещё охуеешь от вложенных структур, которые мигом могут изменить поведение массивов.
666 2849987
>>849966
Двачую, пока чат гопота этого не сказала сам бы не заметил. Почему так криво сделано она не объяснила.
667 2850102
>>849966
Строго говоря, тут нет противоречия. В го действительно все передается по значению, в том числе и мапы/слайсы.
Ведут же они себя так, потому что они содержат указатель внутри себя.
Если ты сделаешь что-то вроде https://go.dev/play/p/sm3e0nhrfnz то ВНЕЗАПНО встретишь такое же поведение, несмотря на передачу "по значению".

Сделано же так для того, чтобы избегать "лишних" копирований, так как мапы и слайсы зачастую бывают очень большими, то копировать их 100500 раз между всеми функциями будет очень накладно. В серьезной разгработке на го обычные структуры с большим количеством полей тоже начинают по указателю передавать, чтобы избегать копирований.
668 2850109
>>850102
С картой разобрался, но срез - это вообще пиздец. Они создали такую структуру, чтобы пользоваться ей адекватно, необходимо прям ковыряться в её кишочках. Да зачем было её инкапсулировать, если без знания кишочков, я не могу ей пользоваться?
669 2850264
>>850102
В реальных проектах такую хуйню вытворяют или это задачка с литкода? Просто выглядит максимально, ну ты понел.
670 2850282
>>850102
Почему s тоже поменялась? Она же ни как не связана со структурой!
671 2850380
>>850282
Потому что структура сохраняет птр. И при копировании скопировалась не строка, а птр на строку
672 2850438
>>850380
Всё равно не понимаю.
Вот допустим у нас:
s -> "foo"
f -> struct {
S -> ptr -> "foo"
}
Далее поменяли "foo" на "bar" в f и должно получится, что
s -> "foo"
f -> struct {
S -> ptr -> "bar"
}
Но почему у нас s поменялась? Эта переменная вообще на стеке лежит и указывает на строковый литерал.
673 2850444
>>850438
S и s это физически одна область памяти.
674 2850449
>>850444
Получается можно перезаписывать даже строки, которые неизменяемые?
675 2850452
>>850449
У констант нет адреса.
676 2850456
>>850452
А можно посмотреть ассемблерную мнемонику этого примера?
677 2850537
>>850456
Причем тут ассемблер, тебе компилятор не даст взять адрес у константы.
678 2850552
>>850438
Почитай про указатели, чел.

> на стеке


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

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

вообще наверни рича хикки про идентити вс валюе, познай дзен и навсегда забей на байтоебство
image.png90 Кб, 762x521
679 2850659
Уважаемый анончик, объясни пожалуйста, почему они говорят прописывать PATH в ~/.profile, а не в ~/.bashrc?
680 2850697
>>850552
До этого примера, я считал, что хорошо понимаю указатели. Есть опыт на сишке и ассемблере. Но здесь явно какая-то неочевидная магия в голанге.
681 2850712
>>850697
Их так никто не использует, имхо. Погружать адресацию глубже одного уровня это извращение какое-то. Дебажить потом будет тот же умник, который эту хуету написал.
682 2850739
>>850697
Нет тут никакой магии, проблема в твоём понимании указателей.

>>850712
Там в примере один уровень адресации (вот как раз в сишке указатели на указатели указателей - обычная история)
683 2850742
>>850659
Потому что дот-профайл предназначен для хранения переменных среды. У меня вот например zsh основной шелл, смекаешь
684 2850743
>>850659
1. это просто файл который большинство оболочек читают по дефолту, максимально оболочконезависимый. есть всякие .bash_profile/.zprofile и т.п., но чтобы не дублировать всякую хуйню, можно либо их не заводить (баш например .profile тогда будет по дефолту читать), либо тупо сорсить .profile из них.
2. rc файлы могут не загружаться при логине, если их явно из profile не засорсить. т.е. в общем случае все переменные, которые ты ставишь в rc, доступны только в интерактивных сессиях -
например, когда ты явно открыл терминал и там запустил программу (т.е. если ты просто запустил бинарник или скрипт, то он их не увидит). профайл файлы (.profile/.bash_profile/.zprofile) исполняются при логине и переменные доступны всем программам.
image.png28 Кб, 655x310
685 2850781
>>850743

>rc файлы могут не загружаться при логине


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

>rc файлы могут не загружаться при логине, если их явно из profile не засорсить


Есть такое. Но с другой стороны, когда у нас обычное окно терминала, (== non-login interactive), логина же нету, т.е. ~/.profile не должен загружаться получается?
686 2850810
>>850781

> , т.е. ~/.profile не должен загружаться получается?


сам файл не должен. но переменные наследуются от родительского процесса. когда ты логинишься, запускается логин шелл, читает .profile и потом спавнит другие процессы, которые наследуют установленные переменные.
687 2850818
>>850810
Вот я изначально так и думал, просто сколько читал нигде такого пояснения не встретил.
Спасибо тебе анон.
688 2850899
>>850109
про кишочки спросят на собеседовании энивей, так что знать надо
689 2850925
>>850109
А что именно по-твоему в абстракции течёт?
690 2850986
>>850109
Не совсем так, прям ковыряться в них не обязательно. Ты должен знать базовые правила:
Если ты пытаешься менять значения слайса, то помнишь, что значение поменяется везде;
Если ты что-то в него добавляешь, то возвращаешь его по аналогии с функцией append;
Если делаешь append, то всегда только в виде X = append(X, ...) и никак иначе.
Соблюдай их и всё будет just fine.
Я согласен, что можно было сделать чуть удобнее, например прикол с тем, что append может вернуть тебе старый слайс, а может как бы новый мне не очень нравится и я бы сделал по другому. Но в целом ты просто привыкаешь к трем правилам и становится норм, в реальной разработке об этом даже не задумываешься.
С мапами же все сильно проще, так как у них нет хитровыебанного append'а.

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

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

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

>>850456
const a string = "blabla"
println(&a) // свалится с ошибкой компиляции
690 2850986
>>850109
Не совсем так, прям ковыряться в них не обязательно. Ты должен знать базовые правила:
Если ты пытаешься менять значения слайса, то помнишь, что значение поменяется везде;
Если ты что-то в него добавляешь, то возвращаешь его по аналогии с функцией append;
Если делаешь append, то всегда только в виде X = append(X, ...) и никак иначе.
Соблюдай их и всё будет just fine.
Я согласен, что можно было сделать чуть удобнее, например прикол с тем, что append может вернуть тебе старый слайс, а может как бы новый мне не очень нравится и я бы сделал по другому. Но в целом ты просто привыкаешь к трем правилам и становится норм, в реальной разработке об этом даже не задумываешься.
С мапами же все сильно проще, так как у них нет хитровыебанного append'а.

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

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

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

>>850456
const a string = "blabla"
println(&a) // свалится с ошибкой компиляции
691 2850987
>>850986
Бля сраный двач не умеет в поинтед списки и я проебал форматирование. Вроде кроме `func (s *S) Set(value string)` ничего не поломалось.
\
692 2850995
>>850987
ХА-ХА. *Попался
693 2851081
Ребят подскажите, а то я туплю есть ли какой способ вызвать дженерик функцию с правильным типом.
Внутри функции без дженерика, которая принимает произвольной Obj any указатель на структуру с данными

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

NewQuery[Type obj - ???](db, obj)
return
}
694 2851130
>>851081
конечно есть. делаешь тайп ассершн и передаешь свой тип. ну или учишь свою женерик функцию работать с any
695 2851134
>>850987
привет реддит
696 2851448
Что мотивирует вас при локальной разработке использовать gopath? Я понимаю, если у вас дев докер, или в продакшене это где-то может быть нужно.
Но почему вы не используете gomodule?
697 2851478
>>851448
я только вкатунов видел, которые по старой инфе из книг учатся. откуда информация, что кто-то модули не использует?

я настраиваю гопатх чтобы делать go mod init без названия модуля, тогда оно само из названий папочек всё подхватывает. у меня GOPATH=~/.local/share/go и ~/.local/share/go/src это симлинк к ~/src
698 2851927
>>849367

>Продолжаем подчищать за лысым дебилом его дебильные косяки


Расслабь булки фембойчик. Просто ряд разрабов не понимают как работают замыкания. C# в свое время тоже менял семантику https://habr.com/ru/articles/141270/ . Java изначально сказала, что замыкания только на final переменные. В Говноленге нет final, так что идут по пути Шарпа.
699 2851982
>>740805 (OP)
Привет, двач

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

Какую хорошую практику использовать, чтобы доставать значения для сравнения? Где их хранить? Типа < даты и меньше id.
700 2851999
>>851982
Но ведь тогда ты завязан на сортировке в репозитории.
А что если на фронте комбобокс с сортировками по имени будет?
Чем плох оффсет?
701 2852002
>>851982
Твою, так как более производительная реализация. Оффсет говнопрактис в определённом контексте.
702 2852017
>>852002
Так а откуда мне взять прошлые значения для параметров created_at и id?
Для первого запроса понятно, а если допустим будет страница номер 10, с чем мне сравнивать столбцы как добыть параметры предыдущей страницы?
Спасибо за ответ
703 2852019
>>851999
Ну я ознакомился с мением в авторитетном источнике в интернетах, что для высокой нагрузки оффсет хуйня потому что при большом количестве записей последние страницы будут ворочаться еле еле.
704 2852024
>>852019

> при большом количестве записей последние страницы будут ворочаться еле еле.


Это да. Но разве поиск строк по индексам не должен помочь?
Не Seq Scan имею ввиду
705 2852038
>>851982
а что за юзкейс где у тебя оффсет на гигабайты?
image.png38 Кб, 678x660
706 2852045
>>852038
База постгрес на ~ 1 лям записей
Везде в интернетах пишут что хуйня идея делать оффсетами.
Снимок экрана 2023-09-23 в 02.18.05.png104 Кб, 876x830
707 2852064
А где? Помню был еще и русский
708 2852074
>>851999
>>852024
Чел правильно сомневается, это известная ловушка при работе с большими таблицами. Суть в том, что для того, чтобы получить твои строки с неким оффсетом, тебе логично нужно все остортировать и прочитать все строки перед твоими, потому что ты заранее не знаешь, что скипать а что нет, особенно в случае каких-то сложных сортировок.
Поэтому любоая реляционная бд начинает тормозить при больших оффсетах и никакие индексы здесь не помогают.
Именно поэтому гугл и прочие стали page token'ы, которые по сутия вляются айдишником последнего просмотренного тобой элемента.

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

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

Соответственно

> Так а откуда мне взять прошлые значения для параметров created_at и id?


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

> Для первого запроса понятно, а если допустим будет страница номер 10, с чем мне сравнивать столбцы как добыть параметры предыдущей страницы?


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

Но кстати если у тебя это пет проект или тестовое задание, то тебе скорее всего нахуй не нужно заморачиваться с этим. Бери оффсет и не парься.
Я программирую уже почти 10 лет сейчас в финтехе где у меня ~лярд строк в некоторых таблицах и почти никогда такие оффсеты не бывают нужны, чтобы такое городить. Пользователям обычно не нужны n-тысячные страницы.
708 2852074
>>851999
>>852024
Чел правильно сомневается, это известная ловушка при работе с большими таблицами. Суть в том, что для того, чтобы получить твои строки с неким оффсетом, тебе логично нужно все остортировать и прочитать все строки перед твоими, потому что ты заранее не знаешь, что скипать а что нет, особенно в случае каких-то сложных сортировок.
Поэтому любоая реляционная бд начинает тормозить при больших оффсетах и никакие индексы здесь не помогают.
Именно поэтому гугл и прочие стали page token'ы, которые по сутия вляются айдишником последнего просмотренного тобой элемента.

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

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

Соответственно

> Так а откуда мне взять прошлые значения для параметров created_at и id?


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

> Для первого запроса понятно, а если допустим будет страница номер 10, с чем мне сравнивать столбцы как добыть параметры предыдущей страницы?


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

Но кстати если у тебя это пет проект или тестовое задание, то тебе скорее всего нахуй не нужно заморачиваться с этим. Бери оффсет и не парься.
Я программирую уже почти 10 лет сейчас в финтехе где у меня ~лярд строк в некоторых таблицах и почти никогда такие оффсеты не бывают нужны, чтобы такое городить. Пользователям обычно не нужны n-тысячные страницы.
709 2852078
>>852074
Большое спасибо за ответ!
710 2852096
>>852064
Первый язык программиста это английский. Без устного английского тут делать нехуй абсолютно
711 2852098
>>852096
Школьного английского хватает почти на всю доку любого языка.
712 2852114
>>852098
А на дейликах как общаться?
713 2852119
>>852114
Стикерами в тг
714 2852131
>>851927
Замыкания как работали, так и работают, их семантика не поменялась. Ты хоть текст по ссылке прочитай.

И это не единичное изменение - буквально все усилия команды разработки после взлёта сабжа направлены на исправление косяков лысого дебила, о которых буквально каждый говорил ему ч самого начала.
715 2852138
>>852119
Ну смотри сам, работы программистом осталось на пару лет. Деньги на мифическое айти будет только в зарубежье. С русским языком ты никому не нужен будешь
716 2852427
Sup, /b/ /pr/.
Есть вопрос по тестам. Как тестировать хэндлер у которого есть id в ссылке?
Типа ссылка:порт/апи/id
Вроде тестирую как описано в гайдах, однако возвращает ошибку что неверный id параметр)

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

Буду благодарен за любой ответ!
717 2852448
>>852427
Я сам понимаю что я где- то должен передавать id параметр для теста хэндлера, но не пойму где
718 2852457
>>852064
Видимо отGoйдирован
719 2852458
>>852427
зачем ты в NewRequest передаешь /:id вместо /123?
720 2852465
>>852427
плюс у тебя настройка экспектейшнов нигде не вызывается
721 2852466
>>852465
Теперь просто ловит панику
722 2852467
>>852465
В смысле не вызывается, я же делаю assert того что получил и того что хочу
723 2852471
Мне кто-нибудь объяснит, нахуя нужны моки, хуеки, стабы, если можно просто фейко репо/сервис подсунуть, ведь все нормальные люди используют DI
724 2852476
>>852467
tt.mockBehavior не вызвается.
NewRequest нужно с валидным хостом/портом/схемой вызывать.
725 2852480
>>852471

>зачем нужны ботинки, если на ноги можно надеть обувь?

726 2852484
>>852480
Ладно, не то написал, нахуя нужны мок, стаб фреймворки/либы, в которых нужно дополнительно разбираться, если можно самому заглушку простую сделать?
727 2852491
>>852484
унифицирует код. иначе приходишь и у тебя от пакета к пакету разные ручные моки, с которыми нужно разбираться. у некоторых будут всякие returnErrorOnMethodSaveStuff bool, у других будут кложуры под методы задаваться или будут разные конструкторы, напилят там фанкшнал опций и всякой другой хуйни. а так разберешься с парой фреймворков и всё везде одинаково. ну и экономит время на написание, когда освоишься - сгенерировал и осталось экспектейшны написать.

хотя если что-то мокается мапой с одним методом и мапа понятнее выглядит в тестовой таблице, то можно и ручной мок написать.
Screenshot from 2023-09-23 16-47-19.png104 Кб, 675x1038
728 2852506
>>852476
Теперь вызывается,
Однако в консоли пишет что:
expected call at /handlers_test.go:107 doesn't match the argument at index 0.
Got: 1
Want: is equal to 1
729 2852537
>>852484
Удачи со своей заглушкой каждый раз программировать хуйню типа
"ожидай 3 вызова метода foo(a,b,c) и чтобы a>10, b="bbb", c = false, а потом не больше одного вызова метода bar()"
Чем дольше сижу на программаче тем больше вопросов, сидит ли здесь кто-то кроме меня и совсем уж джунов
730 2852541
>>852537

>ожидай 3 вызова метода foo(a,b,c) и чтобы a>10, b="bbb", c = false


скорее "ожидай AnyTimes() вызова метода foo(gomock.Any(), gomock.Any(), gomock.Any())"
731 2852546
>>852506
ну так это ты уже сам можешь раздебажить спойлер:подозреваю, что типы разные
732 2852558
>>740805 (OP)
Парни, как вы относитесь к тестировщикам?
Это ИТ специалисты или просто макаки тыкающие кнопки?
733 2852569
>>852537
Дежурно напоминаю, что тестировать внутреннюю реализацию ненужно и вредно. Но если платят за количество написанных строк, то норм.
734 2852574
>>852569
т.е. ничего кроме е2е тестов не нужно
735 2852579
>>852537
Подскажи плз, а вот эти моки == юнит тестам? Или это про разное?
736 2852598
>>852579
Юнит тесты это юнит тесты.
Моки это инструмент (один из) для юнит тестов
737 2852602
>>852579
моки могут и в юнит-тестах и в интеграционных использоваться.

в юнит-тестах они могут как мокать внешние зависимости вроде БД (т.о. интеграционный тесты превращаются в юнит-тесты) или внешние сервисы (обычно мокается твоя внутренняя обертка к апихе), так и внутренние зависимости - всякие другие пакеты того же проекта (т.о. юнит-тесты получаются более изолированные и простые).
в интеграционных тестах моками заменяют совсем внешние зависимости, которые независимо от тебя могут поменяться/упасть - т.е. внешние сервисы, но не БД твоего сервиса. в отличие от юнитов, тут моки уже могут подниматься отдельно, например https://hoverfly.io/ , и к ним идёт реальное обращение по сети.
738 2852617
>>852602

>в интеграционных тестах моками заменяют совсем внешние зависимости


Имеет ли смысл тогда тестировщикам писать интеграционные тесты?
739 2852628
>>852617
как бы нет, но вообще да. если прод упал и юниты не отловили какой-то тривиальный баг из-за несогласованности в критичном сценарии, то возможно стоит написать.

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

если ты говоришь что без походов во внешние сервисы смысла нет в этих тестах, то это уже должно енд-ту-енд тестирование покрывать
740 2852641
>>852628

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


ну или хотя бы отдельные от основных интеграционных тестов и не блочащие пайплайн. хуево будет, если ты не сможешь фиксы катить на прод, потому что на стейдже сломали какой-то сервис
741 2852642
>>852628
Какой у тя опыт на go и че по зп?
742 2852645
Строка - это тоже срез? Как она выглядит под капотом?
743 2852651
>>852642
3.5, 320 на руки
744 2852660
>>852651
Поделись как живешь щас, особенно в сравнении до ИТ.
Может тянки появились, одеваешься в крутой шмот, снимаешь хату с джакузи или может купил мерседес?
745 2852667
Блядь, и сюда /б/ протёк...
746 2852678
Как же хочется писочку с сисочками и 300кк/наносек. ГОЛОВА, ДАЙ ДЕНЯК!
747 2852692
>>852660
на мне сейчас литералли шмотки, которые я купил, когда за 35к стажером устроился. теперь я снимаю с себя плащ и волшебную шляпу, подхожу к тебе и провожу ладонью по
нихуя, я любитель жить как панкбомж. разве что развратился на яндекс.еде и пивасе. пару лет назад съехал от родителей, обустроил себе рабочее место (ну, поставил рядом с раскладным диваном из 90-х стол с регулируемой высотой и два 32' моника). решил купить акций и СЛУЧИЛОСЬ. потом опять, и опять СЛУЧИЛОСЬ. съебал в армению с билетом почти за полторы тогдашней ЗП. экономить на пивасе не приходится, но копеечка копится слабо, потом еще ебаться с нерезиденством придётся. на социализацию сейчас забил хуй, из дома обычно только в магаз выхожу.
748 2852702
>>852692
А работаешь на чем? Макбук?
749 2852784
>>852702
просто какой-то выданный dell. как выпустился из вузика пересел на линух полностью. но 95% у нас в компании на маках и то же самое мог бы отвечать кто-то из них.
750 2852934
>>852096
Челик, ты это к чему высрал? Я спрашивал куда делся, а не что делать
751 2853339
752 2853754
>>852541
Это как раз был бы говнокод, потому что вместо этих any может логично быть хз что

>>852569
Тащемта это не всегда внутренняя реализация, часто это сайд эффект, который является частью логики. Например, заведение данных во внешнем сервисе, тогда ты мокнешь какой-нибудь метод create.
753 2853797
Скажите, пожалуйста. Нахуя мне знать механизм поиска по ключу в мапе? Как это поможет в промышленной разработке кабаньего говна?
754 2853827
>>853797
интегралам тебя тоже зря научили?
755 2853876
>>853797
Чтобы знать, когда мапа подходит, а когда нет. В других языках ты ещё можешь выбрать тип мапы под конкретную задачу и для этого тем более нужно знать особенности
756 2854058
голанг лучше или хуже питона в бэке?
757 2854063
>>854058
1. Немного некорректно сравнивать, совсем разные ниши. Го скорее для производительных серверов, питон для прототипирования.
2. Питон сейчас больше в ML или скриптах для девопсовых штук.
3. Имхо го получше будет, пистон слишком динамический и слишком непроизводительный. А с многопоточкой там пиздец уже просто исторически.
758 2854223
>>854058
если софт написан на нативном питоне, то это хуйня, если это дерганье функций си с питона, то это производительней го, раста, любой хуйни
759 2854250
>>854223
Полный пиздец, ты явно не шаришь, причем даже сам не понимаешь, какую ахинею несешь. Никогда больше не давай никому советов, ни сейчас, ни в жизни вообще.

Производительнее никаких го и тем более уж раста он быть не может. Потому что во первых питон есть питон и поэтому львиная часть ресурсов у тебя уходит на то, чтобы обеспечивать питонячьи фичи типа динамической типизации, декораторов и прочего. То есть, в условной сишке, го или расте объявляя int ты выделяеешь на стеке свои честные четыре байта и всё. В питоне переменная может содержать что угодно, туда можно писать что угодно потом и тд и тп. Поэтому пистон тебе выделит некую абстрактную переменную не помню как в питоне аналог zval называется, которая может содержать что угодно. Она будет жрать больше как раз из-за того что это не просто 4 байта на стеке, а некий довольно сложный конструкт указатель на кучу лол. И потом каждый раз у тебя будут тратится ресурсы на проверку типов, приведение типов, тд, тп. И никакой cpython это не исключит, максимум оптимизирует тривальные случаи.
Во вторых, даже если ты втупую вызываешь некие сишные функции, то ты будешь тратить кучу ресурсов на интероп между питоном и си из-за разницы в представлении данных и прочего, что будет гораздо медленнее, чем если бы ты просто вызывал одну сишную функцию из другой.
В третьих, "просто вызывать сишку" не получится, так как ты сразу начнешь с размаху биться лицом об особенности программирования на си, всякие сегфолты и тп. В итоге ты уже или программируешь на си (но тогда нахуя тебе питон вообще?), или уж на питоне. Всякие написанные под питон и заранее скомпилированные экстеншены это как раз второй случай.
В четвертых, в питоне очень каличный рантайм. Там до сих пор тупой счетчик ссылок в качестве гц вместо хотя бы cms, но главное, что там до сих пор каличный и очень тормозной асинк. В отличие от гошного планировщика с горутинами или растовых рантаймов под это дело. В итоге если у тебя программа это не один большой цикл который нихуя не делает и не параллелится, то это будет тормозить из-за особенностей рантайма и нихуя ты с этим не сделаешь, вот вообще.
759 2854250
>>854223
Полный пиздец, ты явно не шаришь, причем даже сам не понимаешь, какую ахинею несешь. Никогда больше не давай никому советов, ни сейчас, ни в жизни вообще.

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

Алсо

> 2к24


> тестировать отдельный метод криэйт вместо генерации хождения по автомату через проперти-джен фреймворк

761 2854565
>>854250
numpy go brrr
762 2854701
Как вообще идеоматично создавать функции для ListNode (связный список): как методы или как отдельные функции?
С одной стороны хотелось бы работать со списком как с удобной сущность и иметь готовые методы: добавить, удалить и т.п. Но так как сам указатель на начало списка может изменяться, то мы вынуждены возвращать его обратно. В итоге получаем такой код:
ln = ln.Add(10)
Дак может лучше создать интерфейс по аналоги со слайсами и создавать отдельные функции, а не методы?
ln = AddNode(ln, 10)
763 2854703
>>852645

>Строка - это тоже срез? Как она выглядит под капотом?


Не совсем, у слайса есть length и capacity , а у строки только length потому что, строка иммутабельна и аллоцируется нужной длинны.
764 2854705
>>854703
А что передаётся в качестве аргумента функции? Ссылка на начало строки или структура из ссылки и длины строки?
765 2854789
>>854705
судя по всему, поинтер на структ, в котором поинтер на массив и длина
https://go.dev/play/p/Wkn7ze1vJqz
766 2854883
>>854250
Чел, ты сейчас конечно базовые вещи говоришь, только это всё касается чисто питонячьего кода, коим приближением является cpython (не надо мне тут про девственный С заливать). Тяжелые либы пишут на С и пишут далеко не ссаные вкатуны. Всё скомпилировано, готово к использованию. Там выставлено апи для адаптера на питоне, отсюда и производительность, кладущая на лопатки го, расты и прочее говно, которое пытается занять нишу Чед-япа. Питончик только команды отправляет, да данные получает для какой-нибудь минимальной обработки. Нет там значимых потерь на таких операциях.
767 2854982
>>852131

>Замыкания как работали, так и работают, их семантика не поменялась. Ты хоть текст по ссылке прочитай.


Зайчик, используй свою попочку чтобы удовлетворять своего бойфренда, а читай глазами. Я нигде не писал что менялась семантика замыканий. И я не только прочёл, но и дал ссылку на аналогичный кейс у C# очевидно что к этому моменту твоя жопка уже устала и про C# ты не прочёл.
768 2855001
>>854705
>>854789
Просто сделай %+v и там будет видно, что это структура Data&Len. Т.е. передаётся пара Data&Len. Передаётся по значению именно по этому и строка не может быть nil.
769 2855051
>>855001
а, бля, ты прав. я же string касчу к StringHeader
770 2855053
>>855051

>а, бля, ты прав. я же поинтер на string касчу к поинтеру на StringHeader

771 2855198
https://www.youtube.com/watch?v=bQ-ciRZ5fVQ

Не, ну вы только послушайте
772 2855256
>>854982

> не понимают как работают замыкания


Ещё раз, дело не в замыканиях, а в семантике цикла, не понимают как работаеь цикл, замыкания тут ни при чем
773 2855277
>>855256

>Ещё раз, дело не в замыканиях, а в семантике цикла, не понимают как работаеь цикл, замыкания тут ни при чем


У цикла как раз семантика самая простая и очевидная. Есть переменная цикла и она одна, ровно то, что написано. А хотят сделать неочевидную вещь, чтобы переменная цикла на каждой итерации выделялась заново. Как при этом будут работать циклы вида:
for i := 0; i < 10; {
i++
}
решительно непонятно.
774 2855288
>>855277

> говнокод


Полагаю, что говнокод не будет работать. Зачем ты хочешь, чтобы говнокод работал?
775 2855408
>>854883

> Там выставлено апи для адаптера на питоне, отсюда и производительность, кладущая на лопатки го, расты и прочее говно, которое пытается занять нишу Чед-япа.


Такого не может быть чисто физически просто потому, что в самом-самом лучшем случае соревноваться будет код некого экстеншена на си (и затраты на его вызов будут "нулевыми" только в идеале! А на самом деле все равно будут нихуевые косты и за вызовы из питонового рантайма, и за сам рантайм. Ну разве что если у тебя вообще поток исполнения никогда из твоей "либы" не выйдет, но тогда питон не нужен) и код на расте. Которые концептуально равны, но на самом деле llvm под капотом раста в любой более менее сложный код напихает тебе примерно дохулион оптимизаций.
В итоге в самом оптимистичном для тебя варианте (который как правило и всплывает в бенчмарках) у тебя будет какая-нибудь ссаная либа на си с тупым эвент лупом, которая читает и/или пишет в ответ некую статику в противовес сложному но комплексному tokio или чему-нибудь в этом роде, где код на си "выиграет" только по причине крайней примитивности задачи.

Но самое смешное, что даже в этом случае (скажем https://web-frameworks-benchmark.netlify.app/result) питон не входит в топ двадцать, проигрывая той же пыхе, потому что у пыхи намного удачнее сделано сишное апи и в целом она популярнее.
776 2855642
>>855288

>Полагаю, что говнокод не будет работать. Зачем ты хочешь, чтобы говнокод работал?


Пиздец ты даунич. Ты вообще кроме хеловорда что-то разрабатывал?
Такой подход встречается постоянно когда надо итерироваться с переменным шагом. Можно посмотреть стандартную библиотеку
https://github.com/golang/go/blob/5e9afab7df87045bd919b120c1b05476e14d8a35/src/bufio/scan.go#L213
777 2855678
>>855642
А ты не очень умный. Давайте всем тредом поможем Даше переписать говнокод так, чтобы он заработал.
778 2855724
>>855678

>пук-среньк


Аргументы то будут? Может расскажешь как переписать Scan() по правильному?
Или так и будешь пиздеть какой ты охуительный разработчик, а все остальные говнокодеры?
779 2855759
>>855277

>Как при этом будут работать циклы вида:


for i := 0; i < 10; {
i++
}
решительно непонятно.

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

i := 0
for i<10 {
i++
}
780 2855851
>>855724

> как


Ты решительно очень тупой, но тредик уже помог Даше, бгг.

Чтобы почём зря не откапчивать капчу, заодно отмечу, что можно глянуть гит блейм и убедиться, что говнокод наклал именно тот, выпиливанием чьего говнокода из сабжа занимается команда сабжа последние скоро очень скоро уж как десять лет.
781 2856682
>>855851

>Я тупой и могу только писать под себя


Ок.

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


Да всем насрать на твои сексуальные отношения с лысым из бразерс, у нас тут про другое тред.
782 2856688
>>855759

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


Это не "как будут работать", а "как можно переписать". Вопрос то был в обратной совместимости.
783 2856821
>>856688

>Вопрос то был в обратной совместимости.


В старых модулях все будет работать по-старому, в новых - по-новому
784 2856997
>>856682
Можешь ли ты писоть и какоть только под себя я не знаю, а вот доказательства твоей тупости неоспоримы и видны всем выше по треду.

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

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

https://go.dev/play/p/S0rTHgLII8J
787 2857364
>>857338
Спасибо, вроде смог ликвидировать, только не понимаю, почему горутина в консоль не выводит test.
https://go.dev/play/p/H_Sbn4G-RV8
788 2857370
>>857364
потому что отправка в небуферизованный канал блокирует горутину до чтения
789 2857388
>>857370
Вот это открытие, а я думал такое только для читающей горутины справедливо. Благодарю.
790 2857545
https://go.dev/play/p/12W6tIqCsXL

Почему этот код даёт три случайных варианта вывода:
1:
0 (ожидаемый)
2:
0
panic: send on closed channel
3:
panic: send on closed channel
791 2857610
>>857545
Мб ты имел в виду такой код без строчки со слипом:?
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)
}

Поведение очевидное:
Если горутина успеет попробовать записать в закрытый канал, то будет паника
Если не успеет, то паники не будет, т.к. программа завершится до возможной записи в закрытый канал
792 2857622
>>857610
Именно со слипом. Получал рандомный вывод и с go run и в песочнице go play.
image.png29 Кб, 396x581
793 2857628
>>857610
Вот пример удачного завершения.
794 2857644
>>857610
Я к тому, что даю целую секунду на запись, потом закрываю канал. Очевидно ожидаю успеха, но иногда горутине не хватает секунды (хз почему) и случается паника. Ещё не понятнее вывод нуля, а потом паники, при том что я запускаю только 1 горутину, которая отправляет данные в канал.
795 2857731
>>857628
>>857545
1 отправка в канал не успевает произойти до завершения программы. канал закрывается и ты вычитываешь zero-value
2 отправка в канал отрабатывает после fmt.Println, до завершения программы
3 отправка в канал отрабатывает после close и до fmt.Println
796 2857748
>>857644

>Очевидно ожидаю успеха


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

>иногда горутине не хватает секунды (хз почему) и случается паника


у тебя паника случается, когда горутина как раз успевает запуститься и отправить в закрытый канал
797 2857765
>>857748
This. Ну и отсутствие понимания, что эти нули можно бесконечно выводить из закрытого небуферизированного канала. Изначально думал, что fmt.Println(<-testCh) ожидает получение элемента.
goappend.jpg15 Кб, 231x251
798 2858529
Почему он не дает присвоить адрес структуры из append ссылке на слайс? Как вообще получить значения в случае ссылок?
799 2858569
>>858529
во-первых возвращаемое значение функции не аддрессабл. т.е. это уровня взять адрес от суммы интов &(3 + 5). его нужно сначала положить в переменную.
во-вторых, кажется что ты совсем не то, что хочешь, делаешь с поинтерами и если переделаешь нормально, то тебе адрес брать и не нужно будет.
800 2858612
>>858529
Шизофреник, зачем все усложнять?
x = append(x, a)
image.png14 Кб, 360x595
801 2858613
>>858612
бля фронтендер в своей пасте немного форматнул код
802 2858770
>>854701
Почему у тебя указатель на начало списка находится в структуре ListNode?
803 2859253
>>857628
что за шрифт кстати?
804 2859254
>>859253
похоже на Source Code Pro, но почему-то := не выглядит мерзко асимметрично тут, как обычно.
805 2859384
>>858613
Блин, точно! Я после джавы совсем разучился с указателями работать.
806 2859797
>>858770
Он не в структуре, а указатель на структуру.
807 2859819
>>858529
Если что, то это не го вэй. Вместо того, чтобы получать указатель на слайс, просто возвращай новый так, как это делает сама функция append:

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

Менять что-то по указателю это в принципе плохая практика на любом языке. Так иногда делают ради перфоманса, но это явно не твой случай.
image.png30 Кб, 1022x595
808 2859974
>>859819
вполне себе го вей
809 2859983
>>859974
Контекст смотри
image.png33 Кб, 1002x503
811 2860539
Кто-нибудь работал с krakend или другими готовыми API-шлюзами? Мне нужно, шобы работало реверс-прокси в сервисы с авторизацией вида: сходить в юзер сервис, проверить данные и отправить доп заголовок с айдишником пользователя в запросе к сервису.

Вообще оцените норм ли такая схема сервиса как на пике, если нет, то что переделать и почему. CB - это cirquit breaker, чтобы бд могла восстановиться.
812 2860862
Сап, анон. Нужен тактический совет.
Что я хочу:
Клиент получает информационные сообщения и список актуальных данных с сервера.
Что я для этого сделал:
Создал 2 обработчика вебсокет, один из которых доставляет сообщения, а другой массив байт с данными. Всё работает, проблем нет.
Вопрос:
Грамотно-ли такое разделение с множественными соединениями по вебсокету? Сейчас увидел, что с помощью горутин можно запихнуть всё в один обработчик, но придётся немного заебаться на фронте, чтобы определять чего там с сервера пришло. Короче, классический вопрос, как делать хорошо и как не делать плохо.
813 2861796
Посмотрел литературу по Go и пришёл к выводу, что ни одна книга не описывает стандартную библиотеку. Почему-то все ограничиваются только базовыми возможностями. А между тем в net/http довольно много содержится. Порой люди торопятся скачивать какую-нибудь библиотеку по http, когда всё что им нужно уже есть в стандартной, просто они про это не знают из-за недостатка информации в этих книгах.
814 2861881
>>861796
Потому что книги пишут точно такие же Джуны, которые их и читают, только эти пиздеть умеют. А ты думал, что они пишутся крутыми профи? У реальных профи на это времени нет, да и не выгодно это
815 2862070
>>861796
научи бедного стандартной библиотеке и он будет знать стандартную библиотеку, научи его читать документацию и он не будет ныть о том, что его чему-то не научили.
816 2862095
>>862070
А вот в РНР документация на русском...
817 2862783
>>839933
Совет тебе на будущее брат, умножай на 2-3 свои оценки
818 2862938
Вот смотрю, что все профессионалы на го используют иде голанд и мак. Получится ли стать профессионала на вс коде и убунте?
819 2863050
>>862938
Нет
820 2863324
Хули у вас вакансий-то нет на вкат? Я уже от сеньки только отсутствием опыта отличаюсь.
821 2863455
>>863324
Потому что язык не для джунов?
822 2863485
>>863324
Потому что надо вначале вкатиться в РНР, а уже потом в го
823 2863551
>>863455
Охуенный же яп по сравнению со скриптовыми парашами. Учить меня долго не понадобится, ибо уже даже через кишки успел пройти. Не маргинальные либы для освоения закончились, сейчас щёлкаю задачки от нехуй делать. Что ещё надо работодателю?

>>863485
Пыху буду учить дальше, только если это понадобится для переписывания чего-то с неё на гошку.
824 2863554
>>863551
Опыт разгребания говна, который невозможно получить делая домашние проекты по экзамплам библиотек.
825 2863559
>>863554
Разгребал говно за собой, когда по 10 раз переписывал петы.
826 2863647
Сосаны, вечер в хату.

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

Работа окончательно заебала, собираюсь её менять. И тут два стула - дрочить шорпы, чтобы проходить собесы, и собственно их проходить, или же свичнуться на няшную гошку. Во втором варианте скорее всего будет уменьшение зарплаты хотя бы на первое время, но на ~120-130 я протяну изи. Что посоветуете? Свичиться ли, и если да, то есть ли советы мудрые?
827 2863682
>>863647
А какие шарпы? Если формочки, то умножай свои заслуги на ноль. Если асп, то есть шансы вкатиться.
828 2863737
>>863647
Вообще-то это шарпы няшные, готовься к нетривиальному количеству жопоболи
829 2863846
>>863737
Что там няшного? Тонны бесполезного сахара, собран просто весь мусор со всех языков.
830 2864015
>>856997

>Тред про го. Лысый из браззерс - автор


Признайся, дрочишь на него?
831 2864260
А как в профессиональной разработке получают различные конфигурационные значения? Через текстовый файл конфига? Через переменные среды? Или через интерфейс командной строки?
832 2864774
833 2864899
Почему никто не догадался написать на го фреймворк уровня Rails или Laravel?
834 2865024
Как понять в каких случаях надо беспокоится о состоянии гонки, а в каких нет? Пока это всё выглядит какими-то магическими советами, что мол дескать вот тут будет гонка, а тут не будет. Ни какого общего принципа нет. Запоминать все эти миллионы случаев ведь не реально.
835 2865161
>>864260
Я вот выбрал путь переменных среды.

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

>Ни какого общего принципа нет. Запоминать все эти миллионы случаев ведь не реально.


чево? тривиальные гонки всегда видны. что-то посложнее может не всегда воспроизводиться, но рейс детектор с нужными условиями/достаточным количеством попыток отловит и скажет
837 2865219
>>865218

>рейс детектор отловит и скажет


ладно, тут я погорячился. вполне можно написать код, который атомарно делает хуйню уровня "списываем деньги в одной транзакции, а начисляем деньги в другой транзакции"
838 2865222
>>865161
чел, есть всякие варианты и они разнятся между конторами. у нас весь конфиг формально в .env и подгружается при запуске, но сам .env генерится из файлика, который настраивает помимо переменных еще инфру и метаданные сервиса т.п. а в других компаниях были приняты жсон/ямл конфиги, и томлы тоже видел.
так что какой бы ты путь не выбрал, велик шанс что после оффера тебе придется гнуться.
839 2865274
>>865222
У нас сервис при запуске записывает инпут с микрофона и парсит его, попутно проверяя голос на подлинность.
840 2865300
>>865274
у нас коннекшн стринги и всякое такое добавляется при генерации .env.
т.е. если ты указал в главном конфиге, что у сервиса есть постгрес, то при локальном разворачивании у тебя постгрес сам в кубере развернется и в .env сгенерится к нему коннекшн стринг.
841 2865397
>>865024

> общего принципа


Решается компилятором с нормальной системой типов
842 2865518
>>865024

> в каких случаях надо беспокоится о состоянии гонки


В которых ты можешь читать/писать одновременно, не? Что за тупой вопрос, если есть более одной горутины, которые шарят что то между собой - офк будет гонка
843 2865523
>>865518
Некоторые структуры из стандартной библиотеки потокобезопасны. Так что это не тупой вопрос. Возможно ты сам до конца не понимаешь всю сложность.
844 2865541
что вообще написать для практики новичку на вашем этом GO?
845 2865564
>>865541
Новый двач
846 2865602
>>865541
Виртуальную машину, хттп-сервер, контейнеровый рантайм, что-то в таком духе
847 2865653
>>865602

>Виртуальную машину


Как ты её напишешь, если сам го не может в десктопные графические приложения?
848 2865694
>>865653
Posting error: low IQ
849 2865736
>>865694
Как-нибудь повышай IQ своё, а то так и не сможем пообщаться
850 2865746
851 2866156
>>864899
Fiber, Echo, GoGin. Выбирай любой
852 2866206
>>866156
Ну до рельсов им далеко, камон.
853 2866340
>>864260
Всё сразу. Какие-то вещи через конфиг: например лимиты, трешхолды, какая-то статическая информация. Переменные среды используются редко, разве что всякие локали и таймзоны. Параметры запуска: порты, пароли, адреса.
854 2866344
>>865024

>Ни какого общего принципа нет.


Есть мутабельные данные доступные нескольким потокам - есть гонка. Всё просто.
855 2866563
>>865024
Придерживайся двух простых правил.
1) Если что-то в нескольких потоках только читается, но не меняется, то похуй, никаких гонок нет, забей.
2) Если что-то в нескольких потоках ещё и меняется, то всегда без исключений скрывай эту хуйню под мьютексом (на будущее - у теб ещё есть rwmutex, sync.Map и sync.Once)
856 2866730

> 2024


> давным-давно существуют системы типов, исключающие рейс кондишны, и потокобезопасные бай дефолт структуры данных


> Придерживайся двух простых правил...


Индустрия такая индустрия, эх
857 2867025
Почему по го не сливают всякие платные курсы? По всяким джавам завались сливов, а по го ничего нет.
858 2867433
Оказывается го даже хуже пхп
https://www.youtube.com/watch?v=r4bxlnS_h4I
859 2867446
>>867433
1 day ago * в ГО нет генериков
Понимаю.
860 2867678
>>867446
Но их действительно нет, они обещали в следующей версии сделать нормально, но воз и ныне там, генерик аргументы не работают с генерик ресивером
861 2867699
>>866730

>> 2024


>> давным-давно существуют системы типов, исключающие рейс кондишны, и потокобезопасные бай дефолт структуры данных


>> Придерживайся двух простых правил...


Типа там нет других проблем.
862 2867705
>>867699
Другие есть. Но они и в го есть. А вот рейскондишнов нет. А в го есть.
image.png2,2 Мб, 1024x1024
863 2867790
864 2867823
>>867678

> генерик аргументы не работают с генерик ресивером


всмысле? они только с ним и работают
865 2867836
>>867433
Щас бы слушать какого-то левого хуя вещающего на 3.5 калек не то, чтобы я был с ним полностью не согласен, но всё же

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

>>867823
Чел проебался, думаю он хотел сказать, что ты не можешь делать дженерик агрументы у методов структур, либо у функций, либо у ресиверов и это реально не круто, надеюсь, в ближайших релизах исправят. В последнем вон, вывод типов улучшили, теперь хотя бы писанины стало меньше.
866 2867844
>>867836

> эффективность хуже


Сперва корректность, потом эффективность. Преждевременная оптимизация и вся хуйня. Кроме того, это зависит от характера нагрузки. Кроме того, это не относится к афинным системам типов!

> у тебя есть выбор


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

> делаешь блокировки сам


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

> Или берёшь


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

> он умышленно примитивный


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

> я уверен


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

>Чел проебался


Я ж то же самое и сказал блеать, ну да ладно, главное что в итоге всё-таки понятно что имелось в виду
867 2868071
гошники, вам норм на овер 800 постов в треде сидеть?
868 2868279
>>868071
нормально сидим, че ты начинаешь
image.png159 Кб, 600x300
869 2869111
>>867705

>Другие есть. Но они и в го есть. А вот рейскондишнов нет. А в го есть.


Силу косноязычную, в тебе вижу. Изъясняться тебе, понятнее учиться надо. Великим йоба инженером станешь ты, тогда.
870 2869112
>>868071
Вообще ахуенно! Залетных нет, только те кто подписан или ищет по тегу. Раньше Java так делала, и было очень лампово, но потом пришли пидоры и стали перекатывать.
871 2869320
>>869111
У тебя походу проблемы с айсикью. У других проблем с айсикью нет, а у тебя есть.
872 2869326
>>869320
Я свой айсикью до сих пор помню, хотя >10 лет не пользовался.
873 2869404
Как написать веб-приложение на го? Прошёл все эти ваши туры, а как писать веб-приложения, там ничего не сказано.
874 2869410
>>869404
Точно все прошел? Можно так
https://go.dev/doc/articles/wiki/
875 2869492
>>869410
Ух сейчас бы в 2023 html/template
876 2869512
Когда завезут нормальные дженерики, будут ли фиксить хуйню err != nil через строку?
877 2869535
>>869326
А оно ещё работает? Вроде какой-то мейлруагент или подобная фигня её поглотила лет 10 назад
878 2869536
>>869512
Лет через 5, вряд ли.
879 2869549
>>869535
В душе неебу)
880 2869573
>>869410
Это хеллоуворлд, а не полноценное веб-приложение. Как писать полноценные? В плане архитектуры, используемых библиотек, фреймворков, инструментов.
881 2869647
>>869573
В гугле забанили? Учись по видикам этого лысого
https://www.youtube.com/watch?v=b3t8848Tqvg
882 2869858
>>869404
с какой целью интересуешься? если ты вкатыш, то тебя на рабочем месте научат - нужно просто повторить структуру соседних проектов. она не везде одинаковая))
883 2870131
>>869858
Хочешь сказать, что если я прошёл эти мурзилки, то уже можно вкатываться?
884 2870234
>>870131
если ты их пынямаешь,то на позицию джуна тя будут дохуя спрашивать про отличия массивов от слайсов, как работают горутины, архитектуру и тд
885 2870297
>>870234

>архитектуру


Про это в мурзилках не писали.
886 2871641

>type string string


Что это значит?
887 2872651
>>871641
Ничего это не значит, у тебя этот код не скомпилируется даже, так как имя string уже занято.
Ну или возможно ты долбоеб и у тебя там в коде не string а String, тогда кто-то хз зачем просто создал кастомный тип.
888 2872699
Вот не пойму, если ошибки в го - это интерфейс с методом Error, то откуда берутся всякие дополнительные методы New, Errorf и прочие?
889 2872759
>>872699
Из пекейджа errorS, а интерфейс error называется, найди собсна разницу в один символ
890 2872839
Почему по го нет нормальных курсов? Везде какая-то обрывочная инфа, типа вот смотрите есть протокол http, а свой http-сервер сами напишите, го это же просто)))
891 2873264
Почему в убунте 22.04 только пакет с версией 1.18, а не 1.20? Как вообще обновляется го в линуксах?
892 2873345
>>873264
Это не пробовал?
894 2873374
>>873347
Дак там надо самому устанавливать, а потом обновлять тоже ручками. А тут пакеты сами обновляются, только по срокам не понятно.
895 2873406
>>872839
Не надо тебе ничего самому писать, в го буквально шттп пекейдж имеет роутер из коробки и весь прилагающийся функционал
896 2873410
>>873264
Может не будешь пользоваться подобием на ос, а просто использовать винду? Шизофреник
897 2873419
>>873374
В чем проблема ручками установить если нужна свежая версия, чето я не понял? Вот тебе на оф сайте 3 шага предлагают сделать. Непонятно.
898 2873420
>>873264
А что ты еще ожидал от 3rd party опенсурс сообщества, что тебе все нормальное на блюдечке делать будут? Как белый человек сам скомпиль, че ты как лох какой то
899 2873607
>>873406
И как писать свои миддлвари?
900 2873667
Ещё в голанг надо постоянно следить за какими-то новинками среди библиотек. Я вот вообще не знаю ни про какие библиотеки и где узнавать про них.
Почему не напишут какой-нибудь фреймворк, чтобы там уже всё было? Просто берёшь и пользуешься.
901 2873689
>>873410

> го


> винда


Попробуй потоньше.

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

>>873667
Нахуя ты вообще в го полез, если ты вкатыш? Это не для тебя написано.
902 2873785
>>873689
А куда лезть вкатышу?
903 2873948
>>873689
Так го отлично умеет в кроссплатформу шизофреник, или ты из тех. кто юзает тот самый легаси драйвер, который требует CGO?
904 2873966
>>873689
А что не так с го на Винде?
Требовалось написать небольшую прогу, которая будет запускаться хуй знает на какой Винде в каких условиях, возможности отладки не будет.
За вечер перенес функционал с питоняши на гошку и отправил, все работает, на го не писал до этого.
Мимо.
905 2874008
>>873667

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


Так есть уже! https://2ch.hk/pr/res/2871266.html (М)
Берешь и пользуешься, раз в неделю обновляешь конфигурацию и горя не знаешь!
906 2874064
>>873264

>22.04


>LTS


ну во первых это лтс, а во вторых убунта это не роллинг релиз и гошку туда запакетировали не для вас молодой человек. хочешь новые версии, используй анстейбл/тестинг или роллинг релизы уровня рача. удел фиксд релиз плебеев это юзать древние пакеты или ставить себе хуйню в обход пакетного менеджера.
>>873966
зачем хороший язык запускать на хуевой системе? то то и оно. ну и конпелируется долго, я вообще охуел по 10с ждать вместо 1с
907 2874291
>>873785
Сикп читать, на питоне писать.

>>873948
>>873966
Речь про систему разработчика. Ясно, что с учётом сферы применения го никто на венде не сидит, лол, это ж маразм.
908 2874296
>>874291
А если у меня уже есть высшее техническое образование и умею писать lab.cpp?
909 2874779
>>874296
Если бы было, ты бы таких вопросов не задавал бумажка от мухгу не считается
910 2875214
>>874779
С чего ты решил? В универах как раз не приучают изучать что-то новое и следить за популярными библиотеками. Мы там писали в турбо паскале 7.0 сортировки и лишь для своих проектов можно было на С++ что-нибудь пописать.
image.png12 Кб, 255x218
911 2875232
Оцените эстетику go-way.
912 2875382
Чем ваш Пщ лучше Java?
913 2875603
>>874291

> сферы применения


А не похуй где оно применяться будет, если оно там работает, и работает точно так-же? Ты разработчик, и не деплоишь на своем компе лол, тебе тупо код писать надо, ты обычная макака и не больше.
Ты если фронт писать будешь, тебе не обязательно прямо в браузере писать шиз
914 2875692
>>875382
Go использует UTF-8 в строках, а джава UTF-16 и поэтому тратит на ASCII-символы в два раза больше памяти.
915 2875828
>>875214
Это не универы
916 2875829
>>875603
Конечно не похуй, ебаться для бэкенд разработки с вендой - это абсурд, для пердоль которым нечем больше заняться кроме как пердолиться с ос может и подойдет
917 2876191
>>875232
Сделай теперь эксепшен в го
918 2876809
>>876191
panic(exception.New())
919 2876869
>>875829
Так в этом то и прикол, что ебаться там ни с чем не надо будет
920 2877001
>>876869

> мантры диванной спермобляди

921 2877306
>>875692
И это все?
922 2877343
>>877306
Самый главный плюс в том, что в го нет спринг-евангелистов и они не превратили код в спринг-какашку. На го можно писать по заветам Егора Бугаенко, внедрять зависимости в main, а не размазывать аннотации по всему коду.
923 2878079
>>876191
У тебя буквально стандартная библиотека таким промышляет.
924 2879400
помогите собрать вот это:
https://github.com/HyperDbg/gui
какие-то ошибки вылезают при сборке (liteide):
"C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%"

не пойму, зачем компиллятору Go нужен gcc?
925 2879446
>>879400
как тебе такая гипотеза, что в проекте используется cgo?
926 2879448
>>879400
Потому что го умеет только консольные программы компилировать, а графические - нужен модуль с С/С++. Это как в РНР подключают модули расширения на Си.
927 2879503
>>879446
>>879448
можете собрать или рассказать, как это сделать?
928 2879517
>>879503
Как насчет gcc установить ссперва?
929 2879519
>>879503
GOOS=windows CGO_ENABLED=1 go build .

ну и вообще тут не gcc нужен, так что скорее всего тебе еще CC=mingw или вроде того нужно сделать
image.png190 Кб, 995x1044
930 2879532
>>879519
из интереса довёл до конца. поставил mingw-w64-gcc и сделал
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build .
в вайне запустилось (?) даже без ебли
931 2879554
>>879532
поделись, залей куда-нибудь!)
тут слишком сильное колдунство - сам не соберу. Что вот это значит:
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build
где это прописать?
mingw поставил, liteide 38.3, GoLang 1.20.07 (т.к. на Win7_x64 сижу).
932 2879593
>>879554
вот тебе файлик 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. или сам зайди в папку и посмотри как там бинарники называются
933 2879666
>>879593
какая-то х-ня на 28Мб!
Это вообще-то должен быть Гуй к "новому мощному отладчику" HyperDbg. Файл скачался и запустился, но менюшки (кроме Exit) не работают, файл для отладки не выбирается, опции-плагины- вообще ничего не нажимается. Либо собрал криво, либо лыжи не едут..
Ладно, подожду ещё, пока в сети нормальные сборки появятся..
Спасибо!
934 2880550
>>869573
Что ты понимаешь под полноценным?
Ну смотри, берешь любой хттп-сервер гошный, прикручиваешь постгрес/монгу, опционально какой-нибудь билдер запросов.
Обмазываешь все логгером и метриками, опционально реализуешь грейсфул дегрдашейшн и грейсфул шатдаун. Смотри, чтобы слои не протекали друг в друга, связывай компоненты через интерфейсы. Далее (а лучше в процессе) покрываешь свое поделие юнит тестами. Потом делаешь докер файл, довольно урчишь. Когда научишься поднимать свой йобаэппликейшн в докере, докинь интеграционных тестов на докер композе.
Да, можешь обмазаться openApi, если у тебя http. Охапка дров - и круд готов.
935 2880591
А правда, что на голанг очень жесткие собесы? Новичку лучше даже не соваться на них, а попробовать что-нибудь на РНР для начала?
936 2880778
>>880591
Да, правда
937 2880920
>>880591
Что по твоему значит сложный собес?
938 2880937
Как вы начинали учить эту хуйню?
939 2881005
>>880937
откликнулся на стажерскую вакуху на hh чисто чтобы попробовать, ведь модный молодежный язык. когда ответили, прошел go tour и пошел на собес.
940 2881110
go: go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)
Объясните плиз. Ничего не понимаю
941 2881142
>>881005
Сколько лет назад это было?
942 2881145
>>880920
Смотрел на ютубе собесы на го и они все показались мне сложными. Душат по языку, душат алгоритмами, душат всякой архитектурной парашей.
943 2881159
>>880937
Вот начинать как раз не сложно. Тут сложнее продолжить обучение, потому что после определенного момента инфу фиг найдёшь.
944 2881160
>>881142
начало 2020
>>881145
ты хочешь

>обещаешь приходить на дейлики?


>да


>вы приняты!


?
945 2881174
>>881160

>начало 2020


Тогда всех сподряд брали. Сейчас подобный опыт не релевантен.
946 2881201
Какие библиотеки необходимы для реализации микросервисов на Go?
947 2881214
>>881160
Мне кажется сейчас не реально устроится в го без опыта. Берут только свичеров с других языков.
948 2881322
>>881201
стандартная
949 2881324
>>881214
нереал вкатуну чишо?
950 2881358
>>881324
Любому, у кого нет опыта в бэке
951 2881713
>>880937
Устроился на работу, вышел оказалось что пишут на го. Ментор сказал почитать мурзилки про го и тамошние технологии. Через пару недель начал говнокодить.
952 2881866
нахуй вам говноланг если есть TS?
953 2881900
>>881713
А на кого ты устраивался?
954 2882565
Что ждут работодатели от новичка гофера?
955 2882643
>>882565
Что он мидл
956 2882662
>>882643
РНР-мидл?
957 2883044
>>881900

>А на кого ты устраивался?


SRE/SWE. У нас на твой стек особо не смотрят, все равно учиться с нуля.
Но у меня за плечами 15+ лет опыта в топовых компаниях.
958 2883335
>>882662
Грейд относится не к языку, а к навыку разработки.
Доучить "мидловые" фишки языка за неделю можно.
959 2883679
Как могут не ссылочные типы быть равны nil?
960 2883770
>>883679
Когда у тебя интерфейс, изи
961 2883881
>>883679
как в спеке написано и в компиляторе сделано
962 2883995
Привет, программач. Открываю для себя го. Столкнулся с проблемой, что при тестировании хэндлера сравниваю 2 строки, однако происходит какая-то залупа.
Типа "строка" not equal "строка"
Принтил с рефлектом, это точно string
Принтил значение - абсолютно одинаковые строки (пик1)

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

Куда копать, двач?
963 2884269
>>883335

> Доучить "мидловые" фишки языка за неделю можно.


Каков фантазёр.
964 2884271
>>883995
json.NewEncoder добавляет энтры. json.Marshal вроде нет. Смотри как кодируется ответ в боди из хендлера
965 2884274
>>883995
в сторону несравнивания жсонов в строковом представлении.
есть всякие jsondiff или можно в мапу/структ сложить.
966 2884740
Попробовал сегодня голэнд от жидбрейнс и что-то жопа сгорела насколько всё неудобно.
Даже элементарно набираю пакет fmt и в вс коде просто жмёшь Tab и получаешь готовый импорт. Тут надо нажимать "сверх-удобную" комбинацию Alt+Enter. Далее в вс коде можно набрать ключевые буквы функции и она быстро найдётся и это очень удобно, когда полно всякие Printf, Println, Fprintf и т.п. В голэнде же хрен вам, а не ключевые буквы, надо набирать функцию целиком по порядку, пока их тупая система не отфилтрует лишние, т.е. если функция различается только последними буквами, то вы будете всегда(!) набирать функцию целиком.
В общем, не знаю за что они требуют такие деньги. Этот кал хуже бесплатного вс кода с бесплатным плагином от самих разработчиков го.
967 2885833
>>884269
Дай угадаю, коммерческого опыта у тебя я так понимаю не было?

Мимо другой анон, нашел работу мидом в этом году, имея 2 недели опыта языка, перекат с другого
968 2885838
>>884740
Так нах тебе вручную импортить, просто начинаешь писать fmt.Pr и тебе сразу в дропдауне все подходящие, оно тебе и импорт само вставит, никакие альт энтеры не нужны
969 2885872
>>884740
Просто привыкнуть надо.
Я тоже сначала боролся, что он импорты удаляет, потом свыкся.
970 2886920
Выучил гошку и куда теперь дальше двигаться? Подскажите учебные материалы.
971 2887339
А правда, что сервисы уже никто не пишет ручками, а используют кодогенераторы?
972 2887345
>>887339
Да, правда. Их называют джунами.
973 2889355
>>886920
Клеппман Мартин. Высоконагруженные приложения. Программирование, масштабирование, поддержка
Мартин Роберт С. Чистая архитектура. Искусство разработки программного обеспечения
Алгоритмы. Построение и анализ
Мартин Роберт С. Чистый код. Создание, анализ и рефакторинг
Ричардсон Крис. Микросервисы. Паттерны разработки и рефакторинга
Бхаргава Адитья. Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих
974 2890388
Бля, вакансий на вкат в гошку совсем нет, а на мидола коммерческий попыт нужен... Пустите вкатуна!
denisik 975 2890437
а как вкатиться без ком.опыта в прог на go, я того все ебал
варик попрогерить на фрилансе или знакомым с ип поделать заказы, чтоб они указали еще, что работал с ними и пойти на работку в офис кофе пить?
976 2890478
>>890437
>>890388
стажировки,
977 2890556
>>890388
>>890437
ну вот меня тоже кол во вакансии на джунов смутило, поэтому решил сначала в пыху вкатиться, потом на го

мнение?
978 2890695
>>890556
Можно ещё через петон
979 2890705
>>890695
меня смутило 1000 откликов на каждую вакансию по питону, и щас его каждый школьник изучает
980 2890709
>>890705
Есть гоферы-пхпешеры, которые переписывают с РНР на го, а есть гоферы-питонисты, которые переписывают с питона на го. Поэтому ищут чуваков, которые знают сразу два языка. Часто это свичеры.
981 2890751
Прочитал в книжке Боднера, что не стоит пользоваться пакетом net/http для создания своих клиентов и серверов на нём. Они только для тестовых примером годятся, так как обладают рядом недостатков. Вопрос: чем тогда пользоваться в реальной работе?
982 2891130
>>890751
чем читаешь?

>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.


и литералли строчкой ниже пример как инициализировать свой клиент с таймаутом
983 2892886
Почему интерфейсы не имплементируют методы с приемником-указателем? К примеру, тот же Stringer отказывается работать, если в методе указать приемник как указательный тип (со звездочкой)?
984 2892996
>>892886

>К примеру, тот же Stringer отказывается работать, если в методе указать приемник как указательный тип (со звездочкой)?


Схуяли? https://go.dev/play/p/pSvIj30R9qN
985 2893314
>>892996
Вот так вот не работает:
https://go.dev/play/p/stCX6BzsBhS
986 2893396
>>893314
Нужно чтобы переменная была указателем.
https://go.dev/play/p/4FZnRqqSRcg
987 2895897
Попробую на словах описать задачу
Предположим в пакет 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)

Вообщем как не ебать себе мозг и решать подобные маппинги, писать на каждый класс маппер - кажется путь в никуда.
988 2896010
>>895897

>Вообщем как не ебать себе мозг и решать подобные маппинги, писать на каждый класс маппер - кажется путь в никуда.


вообщемто так болиемение и делается.

>Во всех пакетах Gems имеют идентичную структуру и сигнатуры методов.


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

>нельзя взять и преобразовать []struct -> []interface, т.к. O(n)


так маппер так же за o(n) перекложит
989 2896019
>>896010

>вопервых нахуя их три


да там прокси объект, который проксирует вызов апи других объектов, у которых спецификация одинаковая, но все типы этх структур в разных пакетах и это еще и либа, которую кодген наклепал и да, один из объектов отвалится как депрекейтед в итоге
Структуры настолько похожи, что кастуются, т.к. там в основном примитивы в полях
990 2896053
>>896019
ну если тебе нужно упороться по перформансу, то я бы сделал через ансейф (и не забудь какой-нибудь компайл тайм чек добавить, что эта хуйня реально кастуется 1 в 1).
если хочется выебнуться, то интерфейсов бы засунул.
ну или по-обычному просто функцию которая сконвертит одно к другому. если кастуются, то это же тупо луп с одной строчкой в теле.
991 2896173
>>887345
Но ведь кодогенераторы существуют. Я более чем уверен, что в крупных фирмах уже написаны кодогенераторы для создания микросервисов и задача джуна мидла как раз будет заключаться в том, чтобы задать правильные параметры для кодогенератора. В итоге написание микросервисы сводится к запуску и конфигурированию кодогенератора.
992 2896409
>>896173
Дожили, лоукод решения для создания микросервисов.
Screenshot20231027145945.png1,2 Мб, 1284x810
993 2896447
>>896173
всё так, я просто располагаю квадратики и микросервис билдится. вот скриншот
994 2896714
>>896447
Получается современный гофер - это девопс, а вовсе не программист?
995 2896812
>>896714
электрик
996 2897080
>>895897
По нормальному - писать маперы которые будут перекладывать из А в B в C. Потому что если в А добавят поле, то это не сломает мапинг, а если удалят - то сломает на этапе компиляции.
Если ебашить через ансейф, то любое изменение полей меняет бинарную совместимость.
997 2897151
>>897080
Тогда маппинг тоже придется править, там ситуация такая, что A - B - C - эквивалнтны по сути
998 2897331
>>896714
и швец, и жнец, и на дуде игрец
999 2897349
Как организовать правильно структуру проекта из трёх сервисов, чтобы это всё поднималось одной командой докер-компоуза? Вот везде смотрю и там всегда одиночные сервисы, максимум ещё база какая-нибудь поднимается. А у меня у сервисов будет общая кодовая база и каждый по сути билдится из папки cmd/appN/main.go, где appN - название этого сервиса с номером (условно). Но вот как дальше организовать - не знаю. И вообще пишут ли так сервисы или надо их делать отдельными и запускать каждый отдельно через докер?
1000 2897537
>>897349
Типа монорепа?

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, и получается микросервисная архитектура.

Что забыл?
1000 2897537
>>897349
Типа монорепа?

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, и получается микросервисная архитектура.

Что забыл?
1001 2897648
>>897537
Как всрато. Неужели нельзя на несколько реп распределить? Командам только интерфейс взаимодействия знать надо. Нахуя им остальной код проекта?
1002 2897761
>>897151

>Тогда маппинг тоже придется править


Если поля добавляются сразу во все 3 структуры - да. Так-то можно просто кастануть один тип к другому https://go.dev/play/p/zhhXOTbk1b
Но проблема в том, что если поменять A и B, а C забыть - то ошибка будет в рантайме.
1003 2898484
>>897537

>enity


models/dto

>usecase


repository

>adapter


service

>handlers


controllers

Сьеби в свой загон жава пидоров пж
1004 2898555
>>898484

>enity


>models/dto


Но entity это не не модели, и тем более не дто, это разные термины из разных слоев, одно домен, другое презентейшн/аппликейшн

>usecase


>repository


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

>adapter


>service


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

>handlers


>controllers


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

Бля, а можно мне тоже зп синьки говнаря, раз у вас так всё плохо с архитектурой.
мимо недосинька на питухоне
Тред утонул или удален.
Это копия, сохраненная 29 октября 2023 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски