Cамого МУЖЕСТВЕННОГО в мире языка Go тред №16 /go/
ВЕЛИЧЕСТВЕННОЕ БЕЗХОМЯЧЬЕ ЛОГО ЭДИШН
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
>>2061263 Да. В goвне есть какая-то эстетическая притягательность, хотя он довольно старомодный на вид. А на код на шарпе без слез смотреть невозможно, в основном как раз из-за скобок.
Открыл резюме как питонист-ГОвнист, на змеюку начали сыпаться вакансии огромным потоком, на говяху пришла только одна, и то, в связке с пистоном. Тут какое-то время орали о том, что первое нахуй не нужно и все с него переезжают на второе. Ну и где это все?
>>2061078 (OP) На сколько говнокодом является создание вебсокет-ендпоинта на каждую сущность, как мы делаем в случае REST-а? Я, конечно, могу всё в одном соединении делать, пихать json'ы с метадатой и json.RawMessage с пейлоадом, а потом уже, на основании метадаты анмаршалить этот json.RawMessage на конкретный тип, но тогда еще нужно самому реализовывать подписку/отписку, свой аналог multiplexer'а, и, возможно еще кучу всего, о чем я сейчас еще не вспомнил.
С другой стороны, если я создам несколько ендпоинтов, /foo, /bar, /baz, на каждом из которых будут отдаваться только один тип структур - маршалинг/анмаршалинг будет на порядок проще, вместо подписки/отписки у нас просто соединение - пока оно активно, значит клиенту нужны обновления конкретного типа, если закрыто - значит больше нет, multiplexer тоже можно переиспользовать стандартный, либо какой угодно другой из http-совместимых. Код в целом чище и проще.
Но как это по ресурсам? Я предполагаю, что низкоуровневые либы пишут умные люди, и они догадались для нескольких вебсокет соединений от одного и того же клиента к одному и тому же серверу переиспользовать одно и то же TCP/TLS соединение. Подскажите, пожалуйста, как это проверить?
>>2062078 За какой период тебя ддосят? Утром позавчера открыл резюме, сразу же начинают писать тонны хрюш на мейл по пиздону, вакуха по го пришла только вечером и еще одна на следующий день, сейчас закрыл, потому что похоже, что с двойным стеком подходит. А по поводу питоноработы все срут и срут
>>2062209 Всм за какой период? Недавно искал работу - пришлось резюме закрыть через несколько дней из-за спама. Возможно у тебя очень хуевое резюме для гошки. Хотя если ты питонист - то страшно представить какое у тебя гошное резюме. А нахуя ты вообще работу ищешь на питоне и го одновременно по различным резюме? Бред какой-то.
>>2062324 А, неправильно прочитал, у тебя путхон+го. Хз, я мало вакух видел, где питон с гошкой юзают одновременно, у меня то резюме чисто гошника с релевантным опытом. А ты из тех питонистов, что на джанге сайтики клепают? Возможно поэтому мало интереса со стороны гошных позиций, специфика в го посложнее
>>2062330 Почему у всех горит с джанги? Мне например пофигу на чем писать бэк, хоть джанга, хоть асинхронщина, хоть микросервисы на го. Тупо разные задачи, сложность зависит совсем от другого.
>>2062456 У людей горит не с джанги, а с джанго-кодеров, так же как и с ${FRAMEWORK_NAME}-кодеров, по тому что так называют себя люди, которые кроме своего фреймворка ничего другого и не знают. Это как слесарь втулок или сантехник биде
>>2063792 Смотря какие, но лучше поновее искать, гошка беквард компатибилити держит аж с первой версией, так что можно и старье читать, но лучше канеш этого не делать, как и в любом другом языке
Бляпиздец почаны Перешел недавно на уважаемую работу не галера, суперкрупные ребята Раньше у меня в другой компании не было код-ревью и вообще похуистично довольно относились к коду, работает - заебись. А здесь меня на каждом пул-реквесте ебашат за стиль и прочее, постоянно косячу в каких-то мелких моментах, так что ревью занимает вечность и кучу итераций до мерджа в мастер. На этой почве постоянная минус мораль, хоть и тим-лид говорит, что нормально вливаешься и вообще заебись. Хочется сразу писать красоту и правильный код, без разъеба.. Помогите, я уже в конвульсиях по ночам читаю кодстайлы убера и достал с полки макконнелла, аж плакать хочется
>>2063907 Палю годну, авторская методика: делаете в вашей связке VCS и таск трекере максимальный лимит на время ПРа без реакции (approve/reject). При достижении этого лимита - включите автомерж. Пару таких автомержей и дальше желания оставлять ПР без ревью пропадет, базарю. Будут ревьить максимально быстро и эффективно. Дальше, вешаете ограничение на количество реджектов - не более двух. Если ПР реджектится в третий раз - ПР деклайнится автоматом и таска возвращается в бэклог. При этом заассайнить ее снова на последнего девелопера нельзя, ибо тот проштрафился. Это сократит количество итераций ревью
>>2063907 Так радуйся, лол. Если ты хоть немного обучаемый, то за 3-6 месяцев методичного тыкания в говно на пулл-реквестах приспособишься и будешь потом не задумываясь на автомате выдавать отличный код по самым современным кодстайлам. Меня как перебежчика с другого стека тоже активно прикладывают последние полгода за мелкие косяки и тонкости гошки их оказалось намного больше, чем я думал при вкате, лол, но я наоборот не нарадуюсь на такое отношение. Уж лучше пусть сейчас на старте go-карьеры я словлю все косяки и подводные камни, чтобы вбить базу в мышечную память и потом не отвлекаться на мелочи, будучи сеньором-пиздаболом за 300ксек через пару-тройку лет. Ну и за эти полгода мой код заметно вырос по качеству, чего уж греха таить. Еще немного, и начну сам разносить молодых и неопытных джунов на ревью но без жести :3
>>2061078 (OP) Что вообще пилят на го? Кучу микросервисов, перекладывающих джейсоны? Думаю перекатиться из крестов или хотя бы немного диверсифицировать свои навыки, но боюсь охуеть от клепания крудов.
>>2063792 Практически все, значительных изменений языка за 11 лет практически не было. То, что вместо ioutil теперь нужно использовать os или io, где это возможно, и то, что теперь есть NotifyContext и не нужно его каждый раз реализовывать самому - это ничего не меняет.
>>2067215 Допустим, зову сервисы по rpc, надо передать некие данные. Вообще проблемы как таковой нет, интересуют плюсы-минусы по сравнению с тем же протобафом.
Вы бизнес логику на ГОвне пишите или только места соприкосновения с высоконагруженной сетевухой? Перелез с пистона пол года назад и возникло ощущение, что он только для этого и нужен, как будто на недо сишке пишу.
>>2067218 > плюсы-минусы по сравнению с тем же протобафом. Протобафы работают без рефлексии, а еще они язык-независимые, а gob чисто гошный энкодинг, т.е. он нужен, чтобы ты мог сохранять состояние между рестартами процесса в файлик, больше применений у него (почти) нет
>>2067347 Протобаф как идея норм, а как реализация - говно.
Как схема описания данных - это херня, потому что очень мало возможностей (отсутствуют даже базовые, вроде отметки полей как required / optional) и странные ограничения. В итоге приходится лепить костыли типа zero value у енумов или google/types/wrappers для опиональностей. Расширяется тоже уебищно, аннотации неудобны и не проверяются никак. Как кодогенератор херня, потому что генерирует крайне неоптимальный код, []*Type видели? Сколько ненужных указателей, это пиздец, на больших нагрузках ГЦ умирать будет. Актуально кстати не только для го, для джавы там такие же проблемы с кодом. Как тулчейн тоже обосрались, вместо питона написали проток на ебучих плюсах, хер расширишь нормально, для того, чтобы плагин написать или отдебажить, нужно пострадать. Импорты кстати тоже уебищно работают. Как экосистема протобаф + grpc проигрывают jsonчикам просто всухую, количество и качество тулзов несопоставимо просто. Как способ экономить трафик в целом норм, но штука в том, что json | swagger | gzip будет не сильно хуже.
Даже сами сотрудники гугла в неофициальной беседе признавались, что протобаф - это ну такое. Имхо, отличный пример карго-культа и засилия хипстеров в индустрии, гугл ведь говна не сделает, надо брать.
>>2068372 Та в том то и дело, что альтернатив тонет. Не нравиться rest+json и gRPC? Cоздавай свой протокол над http. >>2068353 >Как кодогенератор херня, потому что генерирует крайне неоптимальный код, []*Type видели? Сколько ненужных указателей, это пиздец, на больших нагрузках ГЦ умирать будет. Актуально кстати не только для го, для джавы там такие же проблемы с кодом. Не использовал на проде gRPC, но если гуглу норм - то нам тем более должно быть норм. Похоже на больших объемах трафик дороже CPU. >>2068572 Есть два варианта - либо Goland, либо ваш-любимый-текстовый-редактор+https://github.com/golang/tools/blob/master/gopls/README.md Я сам использую первый вариант, т.к. давно подсел на иглу реактивных мозгов и лень переучиваться. Но люди в интернете говорят, что gopls вполне юзабельный
>>2068760 Как минимум у тебя будет работа, в отличии от миллионов жабистов которые в ближайшие два года дружно отправятся в утиль, так как их костыльная jvm из прошлого века не соответствует реалиям современной разработки
>>2068783 Java вакансий раза в 3 больше чем Go вакансий, браток. Все банки, дохуя серверов, дохуя сервисов, IoT, ретейл и дохуя чего ещё написаны на жабе. В ближайшие два года количество java-вакансий только увеличиться. Так что я спрошу еще раз, с надеждой на адекватный ответ: в чем будет разница между работой на Java и работой на Go?
>>2068785 Он шиз, который принимает ГОвно как спасение и очередную серебрянную пулю. На ГОвне ты будешь пилить быстрый перекладыватель джсонов, для которого ГОвно и было написано
>>2068981 Ну например сегодняшние шарписты, у которых были большие надежды на неткор, но все сдулось и теперь шарп нужен в легаси проектах и игрульках на юнити.
>>2068983 Вроде, попадаются вакансии с неткором, хотя не особо слежу. В энтерпрайз ему пока рановато, там не любят необкатанные технологии. Жаба вряд ли сдается в ближайшие лет 10. С Go не станет хуже, чем сейчас, будет только дальнейшее развитие. Ноду не сервере используют редко. На расте почти нет работы, он тоже набирает популярность, но не такими темпами, чтобы убить кресты в ближайшем будущем. Вот именно в раст и ноду я бы вкатываться не стал.
>>2069698 Если тебе надо получить именно файл - то пусть го (хотя почему именно он, непонятно) файл и делает. А запрос на генерацию файла отправь таким образом, каким это принято у тебя в проекте. Лучше однообразно, чем "как надо в маняфантазиях"
Попробуй из интереса по-писать на каком-нить php-си-расте в блокноте/на бумажке и потом так же на го, вот тут-то ты и прочувствуешь насколько го проще.
Понадобилось копаться в одной софтине на го и модифицировать ее. Посоны, это ужас. Ну совсем прям плохи дела. Язык у вас - калека уровня QBASIC. Работа над ошибками это какое-то квазимодальное уродство. Такое впечатление, что создатель этого издевался над кодерами. Композиция вызовов? Вызов функции в условии ифа? Не нужно. Нужно на каждый вызов функции 4 строки оверхеда с одним и тем же кодом. Поменял возвращаемые значения функции? Будь добр, пройдись теперь по всем return nil, nil, 0, nil, nil, 0, 0, err и поправь их в 20 местах. Что, хочешь спарсить JSON? Нна, сука, по 10 строк на вытаскивание каждого следующего элемента. Продолжать можно долго. Что это? Зачем это? Кто это делает? Почему оно еще живо?
> Зачем это? Чтобы индусам и новому порриджевому поколоению "программистов" было проще переходить к реальным задачам которые будут реализованы через жопу, и их невозможно будет поддерживать, но это уже другая история.
> Кто это делает?
Главпидор всея интернета, а.к.а. Гугл.
> Почему оно еще живо?
Потому что порриджи не способны освоить что-то более сложное и взрослое. Так и живём.
>>2074267 Хуйню несёшь, зумеры тут не при чём, язык создали бумеры, причём уважаемые другими бумерами, и создан он был тоже для бумеров. Если не в курсе, в американских корпорациях на основных сеньорских должностях трудятся люди под сорок. Ты постсоветское эйджистское ведро с крабами / банку со скорпионами не проецируй на западный мир.
> создан он был тоже для бумеров А вот тут ты неправ.
> Если не в курсе, в американских корпорациях на основных сеньорских должностях трудятся люди под сорок
Этот язык не создавали для сеньёров. Сеньёры пишут на нормальных языках, которые требуют работающей головы. Этот же "язык" - это станок для будущего пролетариата, т.е. порриджей. Простой, с минимальным количеством концепций, требующий минимальных знаний. Сел, выучил за неделю и на завод на галеру.
>>2074932 >выучил за неделю и на завод на галеру. Ага блять, за неделю. Из за этого "go way", много всякой нестандартной хуйни. Всякие специфические только для го паттерноы типа singleton dependency injection? multiton. Понимание того как работает GC (который блять меняется через каждую версию), понимание работы шедулера (та же хуйня, что и с gc), дохуища всяких нюансов для горутин, трэйсы etc. Это конечно не c++, которые можно всю жизнь использовать и находить что-то новое, но и не дажва или питон.
>>2076243 > Всякие специфические только для го паттерноы типа singleton dependency injection? multiton В мире го нет специфичных паттернов, особенно таких
> Понимание того как работает GC (который блять меняется через каждую версию) Нет, не меняется. Немного допиливается, но базовая логика неизменна уже давно. Всерьез менялся только один раз.
> , понимание работы шедулера (та же хуйня, что и с gc), Тоже, меняются только детали, типа как в 1.13 добавили шедулинг даже для залоченных горутин.
> дохуища всяких нюансов как вообще в любом языке
> нюансов для горутин, трэйсы etc. Го тура хватает на 90%, го тур + пакет sync так и вообще на все сто. Хз чё тебе там сложным кажется, как раз с горутинами проблем меньше всего, если один раз пройти мануал
Я концептуально с тобой согласен, что никакой язык за неделю не учится на про уровень, и го в том числе, но аргументы у тебя всё равно уебанские
>>2078599 >Нет, не меняется. Немного допиливается, но базовая логика неизменна уже давно. Вот когда завезут суб-миллисекундный гц, как в жяве, тогда язык будет просто топ. Очень хочеца.
>>2074836 Пишут что угодно, это один из настоящий генерал пурпос языков Чтобы преуспеть нужно или быть экспертом DDD, или крутить байты в кешах и гц вручную. К сеньерству должен уметь обе вещи
>>2079026 Очередь задач попадает в "все что связано с облаками". Всё остальное - не целевое предназначение языка, хотя конечно написать можно что угодно. Но если так считать, то вопрос зачем нужен язык вообще смысла не имеет, потому что что угодно можно написать на чём угодно
>>2061078 (OP) Как правильно писать вложенные пакеты? В стандартной либе есть "net/http/fcgi", который импортирует "net/http", который в свою очередь импортирует "net" С другой стороны есть "sync", который импортирует "sync/atomic"
>>2079797 > язык общего назначения Понятие, описывающее несуществующее явление. Иначе был бы один язык, на котором писали бы все. И не надо отговорок про легаси.
>>2080560 > как в жяве Потому и сделали, что надо какое угодно говнище, лишь бы не как в жабе, даже если и не в ней это придумали. В котлине тоже эта шиза, но появляется в другом.
>>2081223 Парадигма-хуедигма. Хули так сложно сделаны констрейнты? Мне всего лишь нужен поинтер любого типа, который обладает парой методов. Нахуя мне 2 типа описывать, если второй тип это буквально что угодно?
Мотаюсь от Го к Расту и обратно, оба нравятся, но хочу писать только на одном, не могу определиться. Моя цель хорошо освоить один язык и юзать его для повседневных задач. Раст осень ноавится, но сложный. Раст и Го вообще очень похожи, go fmt/rustc fmt, cargo install / go install и друг у дружка пиздят фичи.
Вопрос. Наступит ли момент, когда зорошо выучив Раст, я буду на нем задачи решать также быстро как на Го? Или псоле Раста всегда как после войны возвращаешься?
Допустим, хочу тянуть .m3u8-плейлист с твича прямой трансляции и вручную без streamlinkа чанки парсить через for/loop и сохранять на диск аппендить в файл. + возможность записи не 1-го стрима, а 2, 3 хоть 10 стримов одновременно.
Что выбрать лучше, Го или Раст для такой задачи и почему?
>>2084064 Можно приводить к размеру, скажем, 50х50 и сравнивать попиксильно. Больше 95% совпадения - считай одна и та же картинка. Похуй что сложность квадратичная, если тебе нужно запускать это раз в пол года
>>2084187 >+ возможность записи не 1-го стрима, а 2, 3 хоть 10 стримов одновременно нахуя делать это в одном процессе? энивей, ебота с бесполезными фичами конечно же должна писаться на расте и не засирвать гошную экосферу.
>>2087018 потому что юзабилити, не хочет конечный юзер писать баш-скрипт, а если он на виндовсе и у него нет wsl? программа не только качать будет, но и мониторить онлайн, при подрубке начинается запись и так прога висит 24\7 мониторит и авто-качает. ГОДНО!
>>2087721 Тебя забыли спросить. Такая функция есть в математике, называется функция тождества или identity function. Если в языке нельзя ее реализовать, то его место на помойке. Без этой функции не построишь некоторые хороших абстракций.
>>2087807 Работает вроде правильно, но слишком многословно. В голанг слаке показывали очень лаконичный пример без объявления структур и интерфейсов, только это было давно и ссылка не сохранилась.
>>2087928 (((Типобезопасность))) >>2087938 Пустой иетерфейс. Логика в том, что пустой интерфейс не накладывает ограничений на реализацию, а значит, его реализуют вообще все типы. Это как void* ч крестиках или Object в джавашарпах.
Пацаны кто саблайм юзает с го, такая хуйня: почему то при написании case он сразу съезжает влево, какого хуя? Это именно с стандартным Go пакетом такая хуйня, если выбрать другой язык такого не будет, как фиксить то бля это же пиздец как бесит, а саблайм ван лав
>>2088962 А бля ложная тревога, я долбаеб хотел компактным его сделать как на 2 скрине в 1 строчку чтоб умещалось, но го говорит хуй ну лана, буду юзать 1 вариант
>>2088961 Что за либа то хоть? А то я попробовал javafx (да да мертвое говно) и ахуел на сколько все правильно, логично и реактивно в их экосистеме по сравнению с реактом и всем вебом. Жаль десктоп мертв.
>>2088964 уже устанавливал, но чет не сложилось у меня там и я хуй забил + с го как то все проще, тем более раньше его юзал, крч попробую пока на нем посидеть
>>2088967 а хуй знает, все еще выбираю из awesome списка. нашел пиздец простую для ui - fyne, для игор можно sdl или оч простой prototype. а так я на с++ winapi в основном юзал, qt, opengl и тд
Решил посмотреть код драйвера для постреса https://github.com/lib/pq Что тут за хуйня, где структуризация проекта, почему все в одной папке, тесты, документация, реадми, травис, вы ебанулись там?
>>2061078 (OP) Пацаны, как быстро два глаза сделать без ебучего ко? А? А? А? Мааамууу ебал. А? А? А? да я гений нахуй столько отсылок сделать фух ну все на сегодня хватит, лучше уже не будет расходимся
>>2061078 (OP) > - В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском) >(есть на Русском) че за пиздеж? нет там нихуя на русском, максимум на узбекском бля
>>2089730 Раньше был, но на сайте он не работал, только локально. Попробуй тоже локально запустить у меня не получилось, в последней версии go get golang.org/x/tour нихуя не работает В любом случае ты не много потерял, т.к. map'у перевести как "карту" тебе и гугель тренслейтор может.
>>2089818 Ну, тур действительно хорош. Он превращает любого человека, который хоть как-то, хоть на чем-то умеет кодить (включая всяких васянов с вордпреса, петровичей с башем и так далее) в полноценных гоферов, которые могут прочитать практически любой код, благо конструкций языка не так и много, и они, в отличии от раста легко гуглятся, т.к. это ключевые слова, а не спецсимволы.
>>2089848 >они, в отличии от раста легко гуглятся, т.к. это ключевые слова, а не спецсимволы Если бы это было действительно важно мы не жили бы в мире победившего си, и писали бы везде BEGIN; вместо {
>>2090005 Учитывая, что в Go эволюция вспять пошла, не удивительны были бы и BEGIN END. Будь воля Пайка, он бы так и сделал, но это бы отпугнуло потенциальных пользователей языка.
>>2090144 Не удивлюсь, если он переписывает код со второго монитора, и это его первый код на го в принципе Только названия функций меняет, даже не зная, что снейк кейс не принятно использовать даже в константах
>>2090144 Слушаю фоном на 1.75 скорости, весьма простенько там всё, но я не знаю толком го, чтобы оценить, что он несет. Хочется блевать от слова прописывать по сто штук в минуту. В середине видоса начался sql, этот дебич советует васянские сборочки лампа и пхпмайадмин для этого, лол. Продолжаю наблюдения.
>>2090947 >В середине видоса начался sql, этот дебич советует васянские сборочки лампа и пхпмайадмин для этого, лол. Ох какой стыд. Явно пхпшник, гоните его, насмехайтесь над ним Хотя для полного нуля в кодинге может и нормально
Как у го с перформансом? Могу делать эффективную числодробилку как на сишке или максимально оптимизированны только спавн миллионов горутин, либы для взаимодействия с сеткой и перекладывания жсонов?
>>2090961 >Как у го с перформансом? Хорошо, для этого он и создавался. >Могу делать эффективную числодробилку как на сишке Да, вполне. Есть инлайнинг, есть escape analysis, т.е. часть памяти алоцируется на стеке, что на много дешевле чем в хипе. Прям как в сишке не будет, т.к. GC всё еще есть, да и вызовы функций обходятся немного дороже, чем в си за счет того, что планировщику горутин нужно делать свою работу на каждом(?) вызове. Но это всё экономия на спичках, ты не почувствуешь разницу, скорее всего.
>или максимально оптимизированны только спавн миллионов горутин Если что - это всё еще дорогая операция. Дешевле, чем спавн треда, но всё же. Очень редко спавнят горутины динамически, зачастую создают n долгоживущих воркеров, которые читают что-то из канала, делают работу и отдают результат в другой канал.
> либы для взаимодействия с сеткой Низкоуровневый нетворк довольно хорошо оптимизирован, да. Но работы всё еще ведутся. Сейчас идут разговоры о том, что надо изменить структуру IP адреса, т.к. старая использует слайс и это слишком дорого. Да и не по SOLID'у. Но net/http плохо оптимизирован, его используют либо в маленьких проектах, где сервер это не основная задача процесса и когда важно сохранить маленький размер бинаря, либо просто для примера, как накидать что-то по быстрому.
> перекладывания жсонов Стандартный пакет тоже не очень оптимальный, но лично я почти всегда использую именно его, т.к. не работаю в YOBA хайлоаде, где каждую алокацию считают.
Пацаны поясните, я нуб: имеет ли смысл юзать 2 горутины, типа как 2 потока - 1 для отрисовки, 2 для цикла всех вычислений, т.е.: go draw() go update() будет ли теперь все намного шустрее, чем если бы я просто вызывал их без go?
>>2090998 Корутина это не поток и не про параллельность, две корутины могут висеть на одном потоке, но в одно время на потоке будет работать только одна. Поэтому когда корутина делает долгие вычисления и не прерывается, другие корутины привязанные к этому потоку будут простаивать. Преимущество корутин видно только при сотнях тысяч блокирующих операциях, для time consuming операций они не подходят
>>2091004 Разве ГОвяный планировщик не оптимизирует нагрузку, что бы максимально возможное количество корутин выполнялось одновременно распределяясь на максимальное количество тредов/ядер? А то это >Поэтому когда корутина делает долгие вычисления и не прерывается, другие корутины привязанные к этому потоку будут простаивать. очень напоминает кооперативную многозадачность пистона того же и его корутин.
>>2091059 Я особо не углублялся именно в го, но когда последний раз пробовал долгие вычисления перевести на корутины, профитов не было. Тут конечно дохуя факторов. У меня были общие изменяемые данные и пришлось юзать мьютексы, потом перевел на каналы, менял количество корутин, но было либо так же либо хуже. Может именно мой случай, того анона не отговаривать попробовать самому.
> очень напоминает кооперативную многозадачность пистона того же и его корутин. Они наверно везде такие и есть. В шарпе и котлине это тоже самое. Пул потоков, корутины (по сути задачи) и диспатчер, который переключает условный контекст корутин, когда прошлая задача прервалась/кончилась.
>>2090999 Хейтер, плиз. Человек задал вопрос, я на него ответил, что если хочешь выжать максимум производительности - нужно изъебываться, использовать нестандартные реализации для вещей, которые есть в стандартной библиотеке, писать оптимальный код и т.д. Я подошел к вопросу как инженегр, ответил про подводные камни. Я же не маркетолог, чтобы только нахваливать продукт.
>>2090998 Сложно сказать в общем случае, такие вещи нужно смотреть предметно. С одной стороны ты таким образом можешь задействовать 2 CPU, что может быть полезно при большем количестве вычислений. С другой - ты тратишь дополнительное время на синхронизацию (ты же отрисовываешь на основании результата вычислений, не так ли?), по этому в ряде случаев это может работать хуже, чем просто в одной горутине обрабатывать и то и другое.
Ты там ebiten'ю балуешься? Выводи TPS, попробуй оба подхода. Вангую ты не почувствуешь разницы для своих задач, только код зря усложнишь.
>очень напоминает кооперативную многозадачность пистона того же и его корутин. Не совсем так. В Питоне GIL, что означает, что фактически у тебя только один ос тред работает. А в го m:n планировщик.
Как часто вы юзаете := для переменных? Я правильно понимаю, что лучше всего, вместо := использовать var x int ради оптимизации? Или там разница особо несущественная и можно этим пренебречь?
>>2091004 >Корутина это не про параллельность >У меня были общие изменяемые данные и пришлось юзать мьютексы Ну не используй общие изменяемые данные и мьютексы и корутины будут про параллельность Как будто так обдрачиваемый за свою параллельность хаскелль принципиально отличается дизайном планировщика от других планировщиков
>>2092154 ну и че, лисп тоже создавался хуй знает для чего, а в итоге на нем gui и игоры довольно легко пилить если ты не долбаеб, а компиляция совсем уж простейшая
>>2091344 >Я правильно понимаю, что лучше всего, вместо := использовать var x int ради оптимизации?
Ну, оптимизация у тебя будет только если заменишь := на каждой итерации цикла на объявление переменной вне цикла (не важно, через := или var), и затем её будешь переиспользовать. Но это экономия на спичках, и увеличение области видимости переменной, что всегда плохо
>Is it possible to cross-compile an application with Ebiten?
> Yes and no. If the target is Windows or Wasm, yes. Otherwise, it is almost impossible to cross-compile due to Cgo unfortunately. See also Go issue #18296.
Но судя по их FAQу скомпилить под винду можно (из под линукса/мака) Только не забудь компиляторы скачать и настроить.
>>2061078 (OP) Гофаны, посоветуйте годный query builder/ORM для SQLite. В идеале с кодогенерацией миграций и бойлерплейта из моделей. Делаю домашний проект, а голый SQL с васянской обвязкой вокруг я уже работе слишком устал писать.
>>2092656 Пиздос, вот в этом то и загвоздка, у всех сука библиотек гайд как скомпилировать под винду из линукса, а как нахуй из винды для винды хуй его знает блять пиздец просто охуеть в рот ебал, пизда
>>2092656 Короче ебать нашел спасение в Windows Application Library Kit, там manifest только с exe надо тащить и заебись, на других пк все запускается, ахуенно, а я уж думал не существует адекватных либ.
>>2092781 > а как нахуй из винды для винды хуй его знает блять пиздец просто охуеть в рот ебал, пизда Так, ёбана, пожди. Если что-то собирается и работает на твоей винде и не работает на другой винде - значит скорее всего дело в зависимостях. Ты кроме го что-то устанавливал для разработки? Я в виндусятине не понимаю вообще ничего, но тут, вроде, не в го дело.
>>2093179 В том то и дело, что я в рот ебал всякие cygwin, wsl, mingw64 устанавливать ради ебаной компиляции, я вон уже нашел либу для gui и там ниче из этого не надо, тупа go build и заебись, так и должно нахуй быть, без всякой лишней ебли.
>>2089770 Помню, читал что-то питонячье так там set был переведен как "набор", "карты" тоже присутствовали. А после того, как столкнулся с переводом слова state как государство, блядь, перестал читать доки на великом и могучем
Что учить кроме го? Сейчас попал на первую работу на Го(работаю месяц), больше ничего не знаю на должном уровне. Смотрю на php т.к. пока искал работу видел очень много вакансий типа php/go. Например через год-два эти вакансии пропадут? Перекатят ли за это время весь php легаси на го?
>>2094517 МакДональдс работает конкаррентно например.
https://fastapi.tiangolo.com/async/#concurrent-burgers вот на примере "ты пошёл с тяночкой в бургерную", не обращай внимания что это дока к либо от питона, просто там автор ахуительно объяснил почти за весь async-мир.
Блять, на чем можно писать кроссплатформ exe go + html + css? Везде нахуй какие то проблемы! Webview не находит dll! muo блять 64 бита! Gowd запускает только при nw . а как все упаковать хуй его знает вместе с го ехешником, короче я расстроился это пизда.
>>2096237 >лучший По каким критериям судишь? Я вот смотрю, что примеров готовых проектов почти нет, стаей на эту тему не то чтобы много, видосов на ютубе вроде и много, но в сравнении с плюсами - считай что нет
java vs go что выбрать? вроде на первой еще куча энтепрайза пишется на го только озон видел и кучу ноунейм говнеца но озон в то же время на жабе стартует новые проекты вобщем че выбрать для вката в бекенд?
>>2094517 > Как понять конкарренси? Это не совсем правильный вопрос. Правильный вопрос: "как понять примитивы синхронизации". Хотя и это далеко не всем надо, на практике в большинстве случаев тебе с головой хватит нашего аналога Promise.all https://pkg.go.dev/golang.org/x/sync/errgroup#WithContext
> Кто такой этот ваш контекст? Если бы ты прошел тур, ты бы знал что в языке по дизайну заложили возможность передачи сигнала о завершении другой горутине через закрытие канала. А контекст - это просто врапер над этой механикой + пара других фитч
>>2096315 >java vs go что выбрать? Бери джабу, если от нее не воротит. Я фанбой го и всё на нем делаю, но объективно кроме кукроача, докера и кубов в нем нет крупных экосистем. А на джаве целый мир кровавого ентерпрайза. А чтобы писать без фрустраций на го нужно понимать для каких целей язык создавался и какие проблемы должен решать. Да и вакансий на порядок, а может даже на два, меньше чем в жабу
>>2096411 Поможет запихнуть в бинарь ассеты. Но то, что ты ищешь называется "статическая линковка" и далеко не все go враперы над C/C++ умеют в это. А от мозгоебли с кросс-компиляцией так вообще охуеть можно.
>>2095736 Охуеть, нормальная структура проекта, еще бы тесты в отдельную папку вынести. Гоферы, почему половина awesome проектов не имеют структуры как таковой? Я уже выше скидывал подобное https://github.com/lib/pq, у вас что, подобное плохим тоном не считается?
>>2097088 Как на експресе не получится. Будет ебля с ждейсонами, чтобы обработать все 100500 случаев типа "а если клиент строку вместо числа педераст".
>>2097165 А разве на го нет каких нибудь либ, которые проверят соответствует ли жсон определенной структуре и выведет все ошибки каким нибудь методом .Validate ?
>>2097165 Мне HTML странички гененерировать динамически, но и resful тоже. Интерпретируемые языки пошли нахуй, сервер на малине, меньше оверхеда - больше клиентов, меньше падений.
Зачем энтот ваш Go тогда нужен, вроде написано, "for building network applications" и лямбды с асинками есть. Это троллинг? Где готовые фреймворки? Не изобретать же мне велосипед начиная с сырых сокетов.
Мне роуты развести надо, подключить дб, шаблонизатор и кеш страниц, всё. Чё мне делать теперь.
>>2097721 Ты же ленивый, даже загуглить не можешь, может нахуй тебе этот веб-макакинг? >роуты развести надо gorilla mux >подключить дб gorm >шаблонизатор go template / sprig >кеш страниц Без проблем самому запилить, но уверен уже есть готовое решения.
>>2097852 Всем надо решать одни и те же задачи, и тулинг один и тот же. Странно, что до сих пор не высрали аналог джанги или спринга, ведь фреймворки оказались не так уж и не нужны.
>>2098531 >до сих пор не высрали аналог джанги или спринга В мире го так просто не принято. Это ведь замена С/C++ с синтаксическими фичами, легковесными потоками и сборщиком мусора, который умеет без виртуальной машины работать.
>>2098204 Ну ты сначала этот jsoniter попробуй потыкать, и поймёшь. В std парсер делался максимально удобным — хуяк структурка хуяк жсон.
А эти либы — куча ебли и плясок с бубном ради хуй пойми чего, JSON — это про удобство, а не перформанс. Когда нужен перформанс — берут бинарные форматы, и гоняют данные в них. В них и сериализация/десериализация быстрее самого быстрого парсера жсона, и весят они меньше.
>>2098822 >Когда нужен перформанс — берут бинарные форматы Это не всегда возможно, потому что твоя система может интегрироваться с десятком других, которые понимают только жсон и менять формат не собираются. Вот тут-то и нужны быстрые парсеры. А jsoniter - годнота, он совместим со стандартной либой, поэтому пользоваться не сложнее.
>>2098531 >Странно, что до сих пор не высрали аналог джанги или спринга На ГОвне писать БОЛЬНО, даже после жабы, чувствуешь, как тебя ломает архаичность языка
>>2099038 Сам ты шизик. Вoт прикручу к вале веб фремворк на libuv и разрекламирую у хипстеров на конференциях. Ты еще рыдать будешь, что раньше на валюше не писал!
>>2099046 Опять же это фреймворк уровня фласка, роутер + валидация данных. А все потому что для серьезных проектов не нужен фреймворк уровня джанги или спринга, это пережиток прошлого, такие решения всегда будут медленней чем сампописная обвязка вокруг микрофреймворка. MVP можно сделать на джанге, а потом взять го + асинхронный питон и запилить микросервисы. Сейчас на таком проекте работаю.
>>2099829 Смотря что такое "серьёзный проект", если это махровый хайлоад, то может и быстрее. В остальных случаях это будет тупо велосипедостроение, в результате получится медленнее и ненадёжнее, чем фреймворки, которые так любят критиковать в этом треде.
>>2099842 >В остальных случаях это будет тупо велосипедостроение, в результате получится медленнее и ненадёжнее, чем фреймворки, которые так любят критиковать в этом треде. Нифига, в той же джанге нет никакого рокетсаенса, у нас например есть самописная асинхронная джанга из которой мы выкинули ненужные нам фичи, все работает очень стабильно. Так же мы выкинули celery из за лютого оверхеда и написали свое решение, а потом дописали го реализацию. Я хз про какие велосипеды ты говоришь, наоборот код стал максимально простым без лишней магии.
>>2100052 Зарегистрируешься и увидишь, что сервера/сервисы дают не бесплатно, а за определённую стоимость, которую списывают с кошелька, на котором изначально стартовые 12500. Так у многих хостеров, есть стартовая сумма, которую можно потратить в тестовых целях, а дальше только пополнять кошелёк реальным деньгами. И не найдейся потратить их на что-то ещё, это как в той шутке про вывод денег из GTA
>>2061078 (OP) Гофаны, кто-то знает имплементацию http.CookieJar'а, которую можно нормально серилизовать? Ебать cookiejar.Jar рефлексией нет ни малейшего желания.
Ананасы, можно ли в го с помощью рефлексии или как-нибудь иначе получать/изменять значение поля структуры, если название этого поля хранится в переменной и может меняться?
>>2100567 Ты хуйню какую-то делаешь, используй мапу или напиши свитч/кейс. Но если хочешь страдать и говнокодить, говнокодить и страдать - используй reflect.Value.FieldByName()
Сап. Как в го камунити относятся к вкатунам из других языков с опытом работы в вебе? Вот я повидло 3 года пиашпи, насколько мне будет легко вкатиться в мидлопозицию если подрочу петпроджекты? Я и так постоянно их дрочу, но на пиашпи))
>>2100913 >Как в го камунити относятся к вкатунам из других языков с опытом работы в вебе? Нейтрально/положительно
> Вот я повидло 3 года пиашпи Судя по опросам где-то от трети до половины гоферов имеют либо точно такой-же, либо очень похожий бекграунд
> если подрочу петпроджекты Попробуй что-то сделать, где ты сможешь активно использовать каналы, контекст и прочую синхронизацию, например в чатике на вебсокетах.
Гофаны, если использование ОРМ считается плохим тоном, то как правильно организовать работу с БД? Хранить ли методы получения и обновления данных в одном файле с моделью или делать какое-то подобие репозитория? Где выполнять соединение с базой? Как быть с миграциями?
>>2103735 >Как быть с миграциями? Смотря, что ты понимаешь под этим словом. У меня просто в отдельном месте лежит sql файл, в котором прописано все create'ы и insert'ы, через него и делаю миграцию. Советую тебе посмотреть реализацию готовых приложений, там все ультра-понятно с чистейшей архитектурой.
>>2103052 Неа, не хочется, после Раста не хочется. Ты знашеь что в Расте где-то около 5-6 разных стрингов? String, &str, Strings::from, PathBuf и to_string() и т.д. Сущий ад, как же заёбывает конвертировать их туда-сюда.
Блядь, вот зачем дженерики добавляют? Зачем они? Есть же interface{}, так ещё и синтаксис засоряется в виде [] квадратных скобках. Таким темпом в Го коде будет каша как в Расте.
Какие задачи решает T[any T] которые не может решить ( a...interface{}) ?
>>2104009 >А если надо будет откатить? Он спросил как делать миграцию, механизм сохранения, отката миграций, етц, можно за один вечер навелосипедить, либо взять уже готовое решение. golang-migrate
>>2104040 В го ты тоже можешь изъебнутся с билдерами, буферами, через unsafe.Pointer достать StringHeader и за 0 алокаций конвертировать его в слайс и так далее.
>>2104049 А типобизопасность вместо ошибок в рантайме у твоих пустых интерфейсов тоже есть? Если нет, зачем вообще писать на статически типизированном языке?
300к-секи, купите пдфку https://www.practical-go-lessons.com/ Для вас это должно быть раз плюнуть, покажите состоятельность. Заодно можно взять принт и показывать бабе Сраке.
>>2103735 В модели храни только интерфейс репозитория, а саму реализацию сторера со всеми селектами/инсертами с миграциями и настройкой конфигов БД в отдельном пакете типа store разумеется все на чистом SQL, goway все дела. Заодно потом добавишь нормальные моки репы для тестов модели, используя этот же интерфейс. Адрес БД и прочие параметры передавай в сервис через env/yaml/toml, затем это дело считывай в main-горутине, из нее же подключайся к БД и накатывай миграции, после чего инициализируй и раскидывай свои стореры по моделям только не наплоди инстансов на каждый воркер, по одному стореру на таблицу (ну или 2-3 связанных) через синглтон!. Для самих миграций посмотри https://github.com/rubenv/sql-migrate
>>2105634 >В модели храни только интерфейс репозитория Ты там active record делаешь что-ли? Я просто к DDD/hexagonal architecture привык, там модели вообще ничего не импортируют, наоборот, вместо это все остальные слои импортируют модели
>>2105859 >наоборот, вместо это все остальные слои импортируют модели Да, все так, я просто не очень корректно выразился. Сигнатуры функций репозитория описываются именно в модели вместе со всеми интерфейсами (мы обычно их сразу после интерфейсов самой модели кладем, чтобы далеко не ходить), с которыми модель и будет работать вместо прямого импорта сторера. А стораж уже импортирует эту модель и повторяет сигнатуры у себя, можно даже использовать что-то вида статик-чека, чтобы проверять модель на адекватность и не обосраться в рантайме: var _ model.Repo = (*Storage)(nil)
>>2105939 Если ты студент старших курсов, то вкатывайся через стажировки озона/мейла/вайлдберриз и т.д. У меня коллега так стал гофером через одну из этих компаний, миновав все остальные языки по пути к нормальному миддлу (но SQL, HTTP, алгоритмы, паттерны и прочие используемый в бэке-технологии надо разумеется знать). Главное, потом вечным жидом джуном не стать, как чел на пикче.
>>2107039 Просто джуном не надо начинать в больших фирмах, где на метрики дрочат и чуть что за дверь выставляют. Я отработал полтора года в мелкофирме, где этим не заморачивались и с комфортной скоростью дообучался а потом перекотился от них на мидла в другую фирму
>>2106087 Двачу совет, сам сейчас занимаюсь веду стажировку в одной известной крупной компании, готовы брать вообще всех с попытом других языков и желанием изучить го, но да, требуем понимания > SQL, HTTP, алгоритмы, паттерны и прочие используемый в бэке-технологии Задавайте вопросы, если интересно, что могу - расскажу
>>2106051 > не обосраться в рантайме Каким образом? У вас там какое-то хитровыебаное DI через пустые интерфейсы? > var _ model.Repo = (*Storage)(nil) Обычно такой код пишут чтобы ошибка компилятора была попонятнее и поближе к имплеминтации, а не к месту использования.
>>2107271 Ну вот представь, что я у тебя спросил на собеседовании по зуму "слышали ли вы про SOLID?" Что бы ты ответил? Попробуй сейчас написать, не подглядывая в гугел И да, >>2107272 прав
А, еще важный момент - один из самых важных скилов - это знание английского. Без него шансы падают быстрее чем от всего остального вместе взятого. Аутсорс, всё-таки, просто читать документацию не достаточно, нужно уметь еще раз в 2 недели мук-пукнуть заказчику что ты делал всё это время. >>2107278 Провожу собеседования и подготовку к проектам
>>2107286 >А, еще важный момент - один из самых важных скилов - это знание английского. Без него шансы падают быстрее чем от всего остального вместе взятого. Аутсорс, всё-таки, просто читать документацию не достаточно, нужно уметь еще раз в 2 недели мук-пукнуть заказчику что ты делал всё это время. И зачем вы нужны, если можно напрямую работать?
>>2107271 Почитай пару статей в гугле по ключевым словам SOLID Golang, и довольно быстро поймешь, что практически все принципы удобно ложатся в классическую разработку на гошке. Разве что наследование меняется на композицию, а инкапсулировать код приходится внутри пакетов с lowerCamelCase. Ну а интерфейсы это основа основ Go, которые реализуют те же буковки LI. Как бывший сишник скажу, что по солиду и ООП я могу хоть на K&R C писать, инкапсулируя все в файлах через глобальные статические определения переменных и функций, а вместо пустого интерфейса использовать каст к (void*). SOLID очень универсальная штука, знать ее крайне полезно
>>2107302 Я не он, но коммуникацию кто будет поддерживать? Кто будет кабанчиком подскакивать на звонки-встречи для принятия очередного соглашения по очередному вопросику? Ты? Если тебя заставят с людьми разговаривать(на инглише!) вместо написания кода, у тебя подрумянится попка и задрожит голосок. Без дяди ты не справишься.
>>2107337 SOLID же просто про здравое применение ООП, не?
>>2107364 >Я не он, но коммуникацию кто будет поддерживать? Кто будет кабанчиком подскакивать на звонки-встречи для принятия очередного соглашения по очередному вопросику? Так он уже сказал, что с кабанчиком все равно говорить придется и вопросики обкашливать и отчитываться. Я бы понял, если бы они не знали о друг друге, а тут уже нихуя не так.
>>2107286 >Провожу собеседования и подготовку к проектам И на что в среднем может рассчитывать перекатыш из другого стека с опытом около 5 лет? С паттернами, солидом, граспом и законом Деметры дружу. Могу пояснить по хардкору за сложность алгоритмов. Ну и весь остальной фарш в виде баз данных, разных хранилищ и брокеров сообщений в комплекте
>>2107399 На самом деле может быть и 2N (например, если мне надо найти два символа в массиве, и я вместо сравнения каждого символа с двумя искомыми прохожу по массиву два раза - число операций неизменно и растет линейно). Ты не привел конкретного примера.
>>2107444 >>2107445 Ок. Рассмотрим мой пример подробнее, вкатунцы: дан массив - 'a', 'b', 'c', 'd', 'e'. Необходимо найти символы 'd' и 'e'. Возможно два варианта: 1. Идем в цикле по всем элементам массива и проверяем, равен ли текущий элемент 'd' или 'e'. Каждая итерация потребует две операции: 'a' == 'd' ? 'a' == 'e' ? Таким образом, для этого примера получаем len(arr) 2 операций, то есть 10 операций (не будем учитывать всякие оптимизации, типа "если символ равен одному из искомых, то точно не равен второму") 2. Проходим в двух циклах по массиву, сначала проверяя символ 'd', затем - 'e'. На каждую итерацию вложенного массива потребуется одна операция, так как проверяем всего один символ: 'a' == 'd'? То есть проход во внутреннем цикле займет len(arr) 1 операций, то есть 5. Затем мы просто прогоняем тот же цикл для 'e', что дает еще 5 операций. В сумме те же 10 операций. При добавлении элемента в массив кол-во операций увеличится на 2, то есть сложность линейная. В чем я не прав?
>>2107457 Тебе уже раньше правильно ответили. Сложность алгоритма будет равна сложности самой медленной его части, то есть 2^n. Можешь хоть десять квадратов засунуть в него, ничего не поменяется.
Чет никто так и не разъебал мой пример >>2107476 А я уж надеялся, что заблуждаюсь, потому что сам частенько рассчитываю сложность тупо по количеству циклов.
>>2107515 Не понимаю, причем здесь это. Исходное утверждение было "Когда два раза по входным данным проходишь это не 2N", и в этом примере мы дважды проходим по массиву, но суммарное число операций растет линейно. Причем здесь константы?
>>2107367 Ну, мук-пукнуть 1.5 минуты раз в 2 недели это не то же самое, как решать вообще все вопросы и постоянно >>2107387 Ну мы в целом на ждунов нацелены, но в твоем случае тебе могут дать месяц на изучение го (частично самостоятельного, частично вебинары) и затем сразу лычку мидла и за весло. >>2107374 Диванон же
>>2107525 >Ну мы в целом на ждунов нацелены, но в твоем случае тебе могут дать месяц на изучение го (частично самостоятельного, частично вебинары) и затем сразу лычку мидла и за весло.
Скинь название конторы на почту martinточкаalekseevich на протонмейле
>>2107499 Ты понимаешь что тебя за софтскилили? Причем самым тупым образом. Ты уже согласился, что ты веб макака и начал оправдываться, что делаешь, что-то не так только потому, что кто-то другой писал с уверенным видом. И это сделал рандомный анон с желтыми блинами из интернета. Ты хоть представляешь что с тобой матерый кабан сделает?
Пиздец, какие же вы все ущербные, что несут, это пиздец какой-то. Вы такие тупые... Рассуждают о чем то, о чем вообще понятия не имеют, гребут под одну гребенку сложность и асимптотику, и попускаются на собесах вб и озона кек, нужно полным дегродом быть чтобы не пройти. Как же проигал с вас, и уебываю дальше в МВП.
Кстати, раньше на лендингах яндексовых вакансий были фотки с маками, а сейчас что ни подсовывают хрюшки, то сотруднички с леново всякими сидят, то за пеками с но-нейм мониторами
Все, инвестиции в разработку закончились, надо помогать нашим братьям меньшим с такси и доставок?
Зачем в говне так всрато сделаны либы рандома? Каждый раз нужно явно обновлять сид, если ты хочешь новое значение, могли бы хотя бы в конфигах сделать переменную, после которой обновление само бы происходило
Вот решил я написать декоратор для функций, как в пистоне, который бы принимал любые функции и аргументы, но выяснилось, что я должен точно указать сигнатуры, так как интерфейсы не поддерживают вызов, как и types.Func. Это можно как-то обойти?
>>2108712 Тут надо разделять алгоритмы и решение задачек, немного разные скиллы, на алгоритмических секциях нужно немного знания асимптотики и умения решать задачки без ide, потренироваться можно на литкоде, хватит и 20 для озонов и авито, для яндекса 50-70 тоже за глаза хватит. Уровень изи/медиум, но ориентируйся на медиум. Обычно задачки на манипуляцию со строкой, или применение мапы.
Но опять же, базовое знание алгоритмов и структур данных тоже нужно. Грокаем алгоритмы вроде норм, как советует анон, думаю хватит, но сам не читал.
>Насколько такое говно вообще помогает с прохождением собесов? Помогает очень сильно, просто набраться уверенности и набирать код без автодополнения, обрабатывать граничные кейсы, без практики шансы завалить повышаются, но это скорее относиться к яндексу/джуму, для остальных и так хватит. Покупть офк ничего не нужно, там полторы концепции на все задачи. Вот тут есть все техники, если прорешаешь можешь смело пиздовать на собес: https://www.yourdevopsguy.com/how-to-learn-data-structures-and-algorithms-20-problem-solving-techniques-you-must-know/
>>2108351 Ты какую-то динамическую дрысню хочешь сделать, а тут так не принято. reflect.ValueOf(fn).Call должно помочь, но скорее всего ты просто делаешь что-то не так
>>2109772 >а тут так не принято А interface принято делать? У вас тут буквально утиная типизация смешаная со статической.
>>2109772 Не совсем тебя понял, все равно я не могу новую функцию вызвать потом, так как что бы это сделать в возвращаемом значении требуется указать сигнатуру, а декоратор должен принимать любую функцию
>>2110513 А гоферы начинают догадываться, что единственный способ обработать ошибку - показать её текст пользователю. Осталось в ошибку добавить инфу о том, как дошло до вызова этого кода, и получится эксепшен со стектрейсом.
>>2110547 Как можно неудачно перекатиться в го? Или ты пикрил? Вообще в го сейчас по сути бесконечные деньги, раз стажерам озон платит 90к, а джунам под 200.
>>2110673 А зачем что-то начинать? Ты ведь обычная макака-исполнитель, а не творец. Тебе сказали делать хуйню - ты ее делаешь. Зачем что-то придумывать?
>>2110543 > эксепшены созданы, чтобы пробрасывать контекст ошибки вверх по стеку для ее обработки > ошибки в го созданы, чтобы пробрасывать контекст ошибки вверх по стеку для ее обработки )))))))))))) go-way
>>2111178 Уверен процентов на 90, что если и завезут эксепшены, они будут только checked, учитывая наивную идею Пайка, что все ошибки всегда можно обработать на месте.
>>2111187 Ну выскочил IOException. Что ты с ним сделаешь? Выведешь пользователю информацию о том, что "IO error occurred"? По моему никакой разницы нет между тем, чтобы насрать юзеру в лицу стектрейсом или отдельным сообщением.
>>2111187 Это в каком языке так? В шарпе, жабе, петухоне и жопаскрипте исключения ловятся на верхнем уровне, оборачиваются в жсон и отправляются на фронт.
>>2111194 >В шарпе, жабе, петухоне и жопаскрипте исключения ловятся на верхнем уровне В жабе есть checked exceptions. Зачем они были придуманы я до сих пор понять не могу, ну вот как проверяемое исключение IOException можно обработать на месте? Никак нахуй. Приходится указывать что такой-то метод throws IOException. И вот это IOException ловится на верхнем уровне, оборачивается и отправляется на фронт. Нахуя были нужны лишние телодвижения, не понятно.
>>2111192 Остановлю выполнение логики на том уровне, где она не должна быть продолжена Залогирую имея больше информации о происхождении этого контекста >>2111194 Макакер, спок
>>2111201 > Остановлю выполнение логики на том уровне, где она не должна быть продолжена > Залогирую имея больше информации о происхождении этого контекста Прям как с исключениями. > Макакер, спок Слив засчитан. Впрочем, ничего нового
>>2110517 >А гоферы начинают догадываться, что единственный способ обработать ошибку - показать её текст пользователю. Просто попробуй работать в чем-то отличном от ООО "Рога и Копыта" Может тогда тебе и понадобиться что-то вроде retry, а может даже всякие сircuit breaker'ы или graceful degradation'ы. И да, пользователю ошибку вне пхп никто не показывает, максимум возвращают четырех- или пяти- значный код, который сводиться либо к 4ХХ, либо к 5ХХ-м ошибкам. А вот в лог записать - это милое дело.
>>2110538 Нет, т.к. нет задач, которые они смогут решать.
>>2111201 >Остановлю выполнение логики на том уровне Как остановишь? Просто сделаешь return в методе и во всех методах выше по стеку чтоли? Нах? Не лучше ли сделать так, чтобы исключение вывалилось наверх и написало пользователю, что "произошла фатальная ошибка, идите нахуй"? Например сервис обращается по сети к другому серверу, но внезапно оказывается, что тот сервер умер, либо какие-то ошибки в подключении к нему. Произошел IOException. Как его обработать? залогировать и выбросить юзеру, пусть он смотрит, пидорас ебаный
>>2111216 >Может тогда тебе и понадобиться что-то вроде retry, а может даже всякие сircuit breaker'ы или graceful degradation'ы И все это есть прокидывание ошибки на верхний уровень, где ее можно обработать, то есть как с эксепшеном, дебилушка.
>>2111244 > Как остановишь? Просто сделаешь return в методе и во всех методах выше по стеку чтоли? Нах? Посмотри как выглядит try catch пожалуйста и не еби господам мозг > Не лучше ли сделать так, чтобы исключение вывалилось наверх и написало пользователю, что "произошла фатальная ошибка, идите нахуй"? > Например сервис обращается по сети к другому серверу, но внезапно оказывается, что тот сервер умер, либо какие-то ошибки в подключении к нему. Произошел IOException. Как его обработать? залогировать и выбросить юзеру, пусть он смотрит, пидорас ебаный Одно другому не мешает
>2021 >До сих пор нет множеств и очередей Ебаный кошмар, кому пришло в голову сделать облегченный С++ с модными молодежными потоками и слайсами, но с пустой стандартной библиотекой? Почему в STL есть все, чего только душа пожелает, а здесь нужно изобретать свои кривые велосипеды? Нахуя, а главное зачем?
Кстати после того, как добавят дженерики, в мире го внезапно окажется огромное число легаси говна. Вот серьезно, почему нельзя было добавить их сразу? Что за ебланство, почему некоторые вещи в пщ делаются исключительно через жопу там, где даже в самых древних языках вроде С++ и джавы, все куда понятнее и логичнее
>>2111641 Некорректно сравнивать Go с крестами. У говна не было задачи конкурировать с ними, пусть он и компилится в натив. Сравнивать его надо с жабашарпами, но и по сравнению с ними он убрг и примитивен.
>>2111654 >Сравнивать его надо с жабашарпами Разве Го можно втянуть в энтерпрайз, где куча бизнес-логики, для которой нужно полноценное ООП, а не просто структуры, пришедшие из чистой сишки?
>Некорректно сравнивать Go с крестами. У говна не было задачи конкурировать с ними, пусть он и компилится в натив. Мне вроде кто-то пытался объяснить, что Го - это такой C/C++ (наверное все-таки больше С) для дебилов с модной многопоточкой.
>>2111656 Ну в этом и проеб джавы, потому что сейчас дженерики там существуют только на уровне компиляции, а потом стрираются в Object. В шарпе дженерики были сделаны сразу иначе.
>>2111652 Никому не усралось ломать язык меняя его фундаментальную основу. Уже 10 лет кормят женериками, покормят еще 10. Как раз срок жизни подойдёт к концу. А потом можно будет и новый заебенить.
>>2110589 Хватит пиздеть пиздабол, вилка в озоне на мидла 264к до налогов, после налогов получается 229к, и это притом что в озоне нет премий нихуя, только RSU с вестингом через год
>>2112025 Манянаследование, которые не позволяет работать с полями на одном уровне с необходимостью пробрасывать их во в кишки, так как вместо нормального наследования просто добавляется поле-структура.
>>2112086 Если бы наследование полей происходило нормально, то не пришлось бы, а так два "наследования" и уже приходится писать myObject1.myObject2.myObject3.method() вместо myObject1.method()
>>2112104 Проблема не в наследовании (которое чаще всего нахуй не нужно), а в наличии необходимости вызывать myObject3.method() из клиентского класса. Вместо того, чтобы работать с верхнеуровневым апи класса myObject1, ты зачем-то лезешь к нему под капот, и теперь твой клиентский код зависит не только от myObject1, но еще и от myObject2 и myObject3. Удачи в поддержке такой лапши.
>>2112118 Ты не понял, я не хочу лезть в кишки, я хочу работать на одном уровне, как в любом другом языке с нормальным наследованием, где все это активно используется и не является проблемой. Но ГОвно насильно заставляет меня юзать поля структуры, так как другого наследования тут не завезли и либо приходится отказываться от наследования вообще, что нихуя не ООП уже. Если ты говоришь, что наследование не нужно, то и нехуй это ООП называть, так как это нарушает один из основных его принципов. Я не удивлюсь, если это как в джавовских ИДЕ через кодогенерацию делать будут из-за уебищности реализации в самом языке.
Я правильно понимаю, что кроме GORM'а нет альтернатив, чтобы сгенерировать миграции на основании моделей? Не хотелось бы тащить ORM в проект только ради миграций
>>2116236 > Никто не будет делать экспешены, если уже есть panic/recover У них нет стектрейса п подобного, да и маньки не рекомендуют их юзать для ожидаемых ошибок. > Зачем они нужны, если есть структуры? Да и методы ты к любому типу прилепить можешь. Сахарок же. > Struct Tags Не повесишь на структуры и функции, только на поля. > Уже в работе В мифическом Go 2, которого никогда не будет.
>>2116303 >Какие подводные? Кроме косых взглядов со стороны сообщества? Тебе словить панику нужно именно в той же горутине, где она и произошла, иначе весь процесс упадет как в новой ноде практически. Ну и вся экосистема под это не приспособлена, почти каждый метод интерфейса возвращает ошибку, банально не удобно превращать всё в паники, да и смысла на мой взгляд нет, трейс можно и без паники получить. Но если очень хочется то можно, да. >>2116316 >У них нет стектрейса А вот и есть > да и маньки не рекомендуют их юзать для ожидаемых ошибок. Не совсем так. Ожидаемые ошибки - это когда ты знаешь, что Read тебе рано или поздно вернет io.EOF и ты каждую ошибку Readа проверяешь на эндОфФайл и обрабатываешь отдельно от других ошибок. А паники (как и os.Exit) не рекомендуют использовать вне функции main, т.к. другие разрабы просто этого не ожидают. Кстати, os.Exit еще хуже паники, т.к. последний еще даст в defer'ах сделать cleanup, а первый - сразу убивает процесс. > Сахарок же. Тобой выбрана неправильная дверь, дружок-пирожек. Клуб любителей питона 3 тредами выше. > Не повесишь на структуры и функции, только на поля. Если прям очень надо - можно эти самые структуры и функции присвоить как поля другой структуры и туда навесить тег. Только вот наверное это никому и не надо. > В мифическом Go 2, которого никогда не будет. Нет, в go 1.18, который будет в начале 2022-го года. Изначально допускали возможность Go 2, но потом задизайнили так, чтобы не ломать обратную совместимость.
>>2116729 >>2116720 >Щас тебе пояснят, что в говне так не принято. Болван, так блять везде не принято. Циклические иморты - это признак проёбаной архитектуры. З.Ы, Делай как на пике, и все у тебя будет хорошо Гугли clean architecture, либо делай все в одном модуле, как диды.
>>2117484 Во первых, такие функции должны возвращать булево значение. Во вторых, никто не хранит пароль подобным образом. В третьих, либо создай свои типы login и password, либо укажи аргументам тип string
>>2068785 >В ближайшие два года количество java-вакансий только увеличиться
Большая часть java вакансий навсегда останется в эпохе java 8, которая вышла аж в марте 2014 года, как раз ровно в период славных побед России на геополитической арене. Чтобы не быть голословным пидорасом, прикреплю пикрилы. Видишь, какие даты поддержки у 8, 11 и 17 джавы? У 8 версии аж до 2030 года, это дольше, чем у всех последующих версий жаб. К тому же, ни на 11 версию, ни на 17 бизнес особо перекатываться не планирует. С момента выхода 8 версии, когда выпустили stream api, никаких значимых апдейтов не было, ни в самом языке, ни в jvm. Большие надежды были на project loom, который наконец принес бы асинхронность и легковесные потоки, но его обещают с 2018 года, и все никак. В 17 версии loom'а не будет, а так как это LTS релиз, то это очень плохо, даже ужасно. Придется ждать теперь как минимум до осени 2023 года появления легковесных потоков в LTS, и только начиная с того момента можно будет рассчитывать, что все эти новомодные штуки начнут использоваться в проде. Естественно не сразу, году к 2025-2026 примерно.
Я вот сейчас думаю, куда переходить из джавы, ибо застрять в спринге и хибернейте на долгие годы я не хочу, так как боюсь, что через 7 лет мои знания этих кобол-технологий станут мало кому нужны.
>>2118135 Оно всё на непустых интерфесах, т.е. полная поддержка типов, компилятор всё проверяет. Бонусом идет подсказки IDE. Особенно удобно для запросов, где при определенном наборе входящих параметров нужно добавлять дополнительный JOIN или что-то в этом духе, где просто плейсхолдерами параметров не справиться.
>>2118114 Томкат не асинхронный. Драйверы к БД все блокирующие. И хуле толку от того, что в джавакоре есть нио и фьючи? Понятно, что есть Netty в 1.5 проектах, но большая часть это сплошной пердолинг обыкновенного спринга, без какого-либо намека на потоки и асинхронность.
>>2118115 А вот с subquery, традиционно для ОРМов и квери билдеров всё не так гладко, приходиться Raw* конструкторы использовать. Навелосипедил небольшой хелпер, в свободное время поковыряю исходники, может PR зашлю какой. А вообще либа прикольная, из нее легко можно получить как SQL стринг для прода с плейсхолдерами + слайс аргуметнов (как раз аргументы для sql.DB.Query или sql.Tx.Query), либо для дебага sql сразу с подставленными значениями для удобства копипастинга в любое другое место. https://pkg.go.dev/github.com/go-jet/jet/v2/internal/jet@v2.5.0#Statement
То есть нужно отбатрачить примерно 2-3 года на каком-нибудь джава легаси или пхп-битрикс, чтобы вкатиться в го? Не, это залупа я считаю. Лучше буду го дальше учить, авось вкачусь через полгода-годик.
>>2119032 > То есть нужно отбатрачить примерно 2-3 года на каком-нибудь джава легаси или пхп-битрикс, чтобы вкатиться в го? Да, именно так это и работает.
>>2119036 В том, что джуны убыточны, и их надо дотягивать до миддлов, а там, где юзают го, этого пока позволить себе не могут, поэтому дешевле взять миддла из другого языка.