Это копия, сохраненная 30 июля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ВЕЛИЧЕСТВЕННОЕ БЕЗХОМЯЧЬЕ ЛОГО ЭДИШН
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
С чего начать:
- В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)
- Читаем документацию прямо по порядку (пункт "Learning Go"): https://golang.org/doc/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)
Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/
- Книги из списка https://github.com/dariubs/GoBooks
Полезные ресурсы:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/
- Смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Обновляемый список с пакетами: https://github.com/avelino/awesome-go
Небольшой канал треда: t.me/golang2ch и даже живой
Предыдущий тред умирает здесь: >>1986204 (OP)
Шаблон шапки: https://pastebin.com/vmWawK2t
База
Адепт уродливого переноса скобок, плиз. Съеби обратно в мвп-тред, откуда ты вылез.
Твой батя-алкаш чмоха, чмохин ты сын.
https://go.googlesource.com/proposal/+/refs/heads/master/design/go2draft-contracts.md
Какой-такой синтаксис ты не знаешь?
А у меня трудности вызывают только форматирование даты, там какой-то пиздец навелосипедили.
Твой выбор языка понятен, раз у тебя мир сошёлся клином на конвенциях о скобочках.
Как выглядит zero allocation CRUD на этих ваших шарпах? Такой же пиздец как на джабе или хоть чуть-чуть получше?
Да. В goвне есть какая-то эстетическая притягательность, хотя он довольно старомодный на вид. А на код на шарпе без слез смотреть невозможно, в основном как раз из-за скобок.
Моча лучше goвна? Сомнительно.
Вот тут приняли дженерики и теперь они ожидаются в Go 1.18
https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
Обновите шапку, все таки дженерики вам нужны получается
>>061258
На сколько говнокодом является создание вебсокет-ендпоинта на каждую сущность, как мы делаем в случае REST-а?
Я, конечно, могу всё в одном соединении делать, пихать json'ы с метадатой и json.RawMessage с пейлоадом, а потом уже, на основании метадаты анмаршалить этот json.RawMessage на конкретный тип, но тогда еще нужно самому реализовывать подписку/отписку, свой аналог multiplexer'а, и, возможно еще кучу всего, о чем я сейчас еще не вспомнил.
С другой стороны, если я создам несколько ендпоинтов, /foo, /bar, /baz, на каждом из которых будут отдаваться только один тип структур - маршалинг/анмаршалинг будет на порядок проще, вместо подписки/отписки у нас просто соединение - пока оно активно, значит клиенту нужны обновления конкретного типа, если закрыто - значит больше нет, multiplexer тоже можно переиспользовать стандартный, либо какой угодно другой из http-совместимых. Код в целом чище и проще.
Но как это по ресурсам? Я предполагаю, что низкоуровневые либы пишут умные люди, и они догадались для нескольких вебсокет соединений от одного и того же клиента к одному и тому же серверу переиспользовать одно и то же TCP/TLS соединение. Подскажите, пожалуйста, как это проверить?
пихать результат в аргументы метода, везде. как в с/с++
За какой период тебя ддосят? Утром позавчера открыл резюме, сразу же начинают писать тонны хрюш на мейл по пиздону, вакуха по го пришла только вечером и еще одна на следующий день, сейчас закрыл, потому что похоже, что с двойным стеком подходит. А по поводу питоноработы все срут и срут
Всм за какой период? Недавно искал работу - пришлось резюме закрыть через несколько дней из-за спама. Возможно у тебя очень хуевое резюме для гошки. Хотя если ты питонист - то страшно представить какое у тебя гошное резюме. А нахуя ты вообще работу ищешь на питоне и го одновременно по различным резюме? Бред какой-то.
А, неправильно прочитал, у тебя путхон+го. Хз, я мало вакух видел, где питон с гошкой юзают одновременно, у меня то резюме чисто гошника с релевантным опытом. А ты из тех питонистов, что на джанге сайтики клепают? Возможно поэтому мало интереса со стороны гошных позиций, специфика в го посложнее
Спасибо
Не, всякое микросервисное говно с кафкой и кроликом
Почему у всех горит с джанги? Мне например пофигу на чем писать бэк, хоть джанга, хоть асинхронщина, хоть микросервисы на го. Тупо разные задачи, сложность зависит совсем от другого.
У людей горит не с джанги, а с джанго-кодеров, так же как и с ${FRAMEWORK_NAME}-кодеров, по тому что так называют себя люди, которые кроме своего фреймворка ничего другого и не знают. Это как слесарь втулок или сантехник биде
Нет
Спасибо, анончик, годнота
Есть ли шанс вкатиться нубу и найти работу джуном без опыта?
Смотря какие, но лучше поновее искать, гошка беквард компатибилити держит аж с первой версией, так что можно и старье читать, но лучше канеш этого не делать, как и в любом другом языке
Перешел недавно на уважаемую работу не галера, суперкрупные ребята
Раньше у меня в другой компании не было код-ревью и вообще похуистично довольно относились к коду, работает - заебись. А здесь меня на каждом пул-реквесте ебашат за стиль и прочее, постоянно косячу в каких-то мелких моментах, так что ревью занимает вечность и кучу итераций до мерджа в мастер. На этой почве постоянная минус мораль, хоть и тим-лид говорит, что нормально вливаешься и вообще заебись. Хочется сразу писать красоту и правильный код, без разъеба.. Помогите, я уже в конвульсиях по ночам читаю кодстайлы убера и достал с полки макконнелла, аж плакать хочется
Палю годну, авторская методика:
делаете в вашей связке VCS и таск трекере максимальный лимит на время ПРа без реакции (approve/reject). При достижении этого лимита - включите автомерж. Пару таких автомержей и дальше желания оставлять ПР без ревью пропадет, базарю. Будут ревьить максимально быстро и эффективно. Дальше, вешаете ограничение на количество реджектов - не более двух. Если ПР реджектится в третий раз - ПР деклайнится автоматом и таска возвращается в бэклог. При этом заассайнить ее снова на последнего девелопера нельзя, ибо тот проштрафился. Это сократит количество итераций ревью
Так радуйся, лол. Если ты хоть немного обучаемый, то за 3-6 месяцев методичного тыкания в говно на пулл-реквестах приспособишься и будешь потом не задумываясь на автомате выдавать отличный код по самым современным кодстайлам. Меня как перебежчика с другого стека тоже активно прикладывают последние полгода за мелкие косяки и тонкости гошки их оказалось намного больше, чем я думал при вкате, лол, но я наоборот не нарадуюсь на такое отношение. Уж лучше пусть сейчас на старте go-карьеры я словлю все косяки и подводные камни, чтобы вбить базу в мышечную память и потом не отвлекаться на мелочи, будучи сеньором-пиздаболом за 300ксек через пару-тройку лет.
Ну и за эти полгода мой код заметно вырос по качеству, чего уж греха таить. Еще немного, и начну сам разносить молодых и неопытных джунов на ревью но без жести :3
Ты уже проиграл молодым-упругим джунам-конкурентам, можешь выкатываться.
Джунам здесь делать нечего.
Оке, в след шапку докину
Что вообще пилят на го? Кучу микросервисов, перекладывающих джейсоны? Думаю перекатиться из крестов или хотя бы немного диверсифицировать свои навыки, но боюсь охуеть от клепания крудов.
Байтоеба ответ.
>>2065903
У тебя файл пересоздаётся каждый раз скорее всего
Практически все, значительных изменений языка за 11 лет практически не было. То, что вместо ioutil теперь нужно использовать os или io, где это возможно, и то, что теперь есть NotifyContext и не нужно его каждый раз реализовывать самому - это ничего не меняет.
Допустим, зову сервисы по rpc, надо передать некие данные. Вообще проблемы как таковой нет, интересуют плюсы-минусы по сравнению с тем же протобафом.
Это не изменение языка, это изменение тулинга. Да и то, тебе один раз на проект нужно сделать go mod init и дальше всё как и раньше
> плюсы-минусы по сравнению с тем же протобафом.
Протобафы работают без рефлексии, а еще они язык-независимые, а gob чисто гошный энкодинг, т.е. он нужен, чтобы ты мог сохранять состояние между рестартами процесса в файлик, больше применений у него (почти) нет
Протобаф как идея норм, а как реализация - говно.
Как схема описания данных - это херня, потому что очень мало возможностей (отсутствуют даже базовые, вроде отметки полей как required / optional) и странные ограничения. В итоге приходится лепить костыли типа zero value у енумов или google/types/wrappers для опиональностей. Расширяется тоже уебищно, аннотации неудобны и не проверяются никак.
Как кодогенератор херня, потому что генерирует крайне неоптимальный код, []*Type видели? Сколько ненужных указателей, это пиздец, на больших нагрузках ГЦ умирать будет. Актуально кстати не только для го, для джавы там такие же проблемы с кодом.
Как тулчейн тоже обосрались, вместо питона написали проток на ебучих плюсах, хер расширишь нормально, для того, чтобы плагин написать или отдебажить, нужно пострадать. Импорты кстати тоже уебищно работают.
Как экосистема протобаф + grpc проигрывают jsonчикам просто всухую, количество и качество тулзов несопоставимо просто.
Как способ экономить трафик в целом норм, но штука в том, что json | swagger | gzip будет не сильно хуже.
Даже сами сотрудники гугла в неофициальной беседе признавались, что протобаф - это ну такое.
Имхо, отличный пример карго-культа и засилия хипстеров в индустрии, гугл ведь говна не сделает, надо брать.
Та в том то и дело, что альтернатив тонет.
Не нравиться rest+json и gRPC? Cоздавай свой протокол над http.
>>068353
>Как кодогенератор херня, потому что генерирует крайне неоптимальный код, []*Type видели? Сколько ненужных указателей, это пиздец, на больших нагрузках ГЦ умирать будет. Актуально кстати не только для го, для джавы там такие же проблемы с кодом.
Не использовал на проде gRPC, но если гуглу норм - то нам тем более должно быть норм. Похоже на больших объемах трафик дороже CPU.
>>068572
Есть два варианта - либо Goland, либо ваш-любимый-текстовый-редактор+https://github.com/golang/tools/blob/master/gopls/README.md
Я сам использую первый вариант, т.к. давно подсел на иглу реактивных мозгов и лень переучиваться. Но люди в интернете говорят, что gopls вполне юзабельный
ну как схема данных, тут уж простите, или schemaless бинарщина со своими плюсами-минусами, либо json и далее
а в плане иплементации, да, гугол жиденько обосрался, посмотри на альтернативную имплементацию https://github.com/gogo/protobuf
или альтернативные бинарные протоколы wire, msgpack, avro, твитеровский какой-то, не помню как называется
без нормального протокола наешься говна как пхпшники, со своим `serialize()` в свое время.
>>068572
любой редактор по вкусу, который умеет LSP + gopls сам на gopls сижу, зависимость есть, брат жив
>>067247
пишу, прививаю команде DDD и гексагональность ибо заебали со своим копипастным-говнокодом
Предложили перекат с java на Go. Какие подводные камни?
В каком плане? В чем будет для меня разница?
Как минимум у тебя будет работа, в отличии от миллионов жабистов которые в ближайшие два года дружно отправятся в утиль, так как их костыльная jvm из прошлого века не соответствует реалиям современной разработки
Java вакансий раза в 3 больше чем Go вакансий, браток.
Все банки, дохуя серверов, дохуя сервисов, IoT, ретейл и дохуя чего ещё написаны на жабе. В ближайшие два года количество java-вакансий только увеличиться.
Так что я спрошу еще раз, с надеждой на адекватный ответ:
в чем будет разница между работой на Java и работой на Go?
Он шиз, который принимает ГОвно как спасение и очередную серебрянную пулю. На ГОвне ты будешь пилить быстрый перекладыватель джсонов, для которого ГОвно и было написано
Сам я немного прогал на плюсах и на джаве.
Что такое обочина разработки? Даже крестов с жабой тебе хватит минимум до 2030. Если надо модное-молодёжное, иди во фронтенд.
Ну например сегодняшние шарписты, у которых были большие надежды на неткор, но все сдулось и теперь шарп нужен в легаси проектах и игрульках на юнити.
Вроде, попадаются вакансии с неткором, хотя не особо слежу. В энтерпрайз ему пока рановато, там не любят необкатанные технологии. Жаба вряд ли сдается в ближайшие лет 10. С Go не станет хуже, чем сейчас, будет только дальнейшее развитие. Ноду не сервере используют редко. На расте почти нет работы, он тоже набирает популярность, но не такими темпами, чтобы убить кресты в ближайшем будущем. Вот именно в раст и ноду я бы вкатываться не стал.
Как в таких сдучаях у вас принято общаться между core (например ruby) и сервисом с го?
Если тебе надо получить именно файл - то пусть го (хотя почему именно он, непонятно) файл и делает. А запрос на генерацию файла отправь таким образом, каким это принято у тебя в проекте. Лучше однообразно, чем "как надо в маняфантазиях"
Спасибо за отклик, антош. На рубях отчет генерится больше 20 минут, поэтому надо что-то с этим делать.
> есть желание
подрочи, обычно помогает
> Как в таких сдучаях у вас принято общаться между core (например ruby) и сервисом с го?
да как и с остальными языками, через IPC, RPC и все прочее
> На рубях отчет генерится больше 20 минут, поэтому надо что-то с этим делать.
а почему ты считаешь, что если просто переписать с одного языка на другой, то станет быстрее?
> а почему ты считаешь, что если просто переписать с одного языка на другой, то станет быстрее?
Потому что на соседнем проекте на crystal похожее вылезает за несколько секунд. Меня кристал не особо интересует, поэтому смотрю на го.
Даже хаскелль используют, если хорошо поискать.
Как пролез?
Так про любой язык можно сказать. И нигде так делать не будут, потому что неудобно.
Попробуй из интереса по-писать на каком-нить php-си-расте в блокноте/на бумажке и потом так же на го, вот тут-то ты и прочувствуешь насколько го проще.
Пробовал, не проще.
Работа над ошибками это какое-то квазимодальное уродство. Такое впечатление, что создатель этого издевался над кодерами. Композиция вызовов? Вызов функции в условии ифа? Не нужно. Нужно на каждый вызов функции 4 строки оверхеда с одним и тем же кодом. Поменял возвращаемые значения функции? Будь добр, пройдись теперь по всем return nil, nil, 0, nil, nil, 0, 0, err и поправь их в 20 местах. Что, хочешь спарсить JSON? Нна, сука, по 10 строк на вытаскивание каждого следующего элемента. Продолжать можно долго.
Что это? Зачем это? Кто это делает? Почему оно еще живо?
Платят за него больше всего, работать на нём просто, язык быстрый по перформансу и по скорости написания программ.
Вызвать в условии ифа можно. А как в других языках (именно языках, не иде) меняются ретурны самостоятельно? Как это вообще возможно?
> Что это?
Язык-гной, язык-пидор.
> Зачем это?
Чтобы индусам и новому порриджевому поколоению "программистов" было проще переходить к реальным задачам которые будут реализованы через жопу, и их невозможно будет поддерживать, но это уже другая история.
> Кто это делает?
Главпидор всея интернета, а.к.а. Гугл.
> Почему оно еще живо?
Потому что порриджи не способны освоить что-то более сложное и взрослое. Так и живём.
Согласен, пхп он такой, но зачем ты в го тред это постишь?
Хуйню несёшь, зумеры тут не при чём, язык создали бумеры, причём уважаемые другими бумерами, и создан он был тоже для бумеров. Если не в курсе, в американских корпорациях на основных сеньорских должностях трудятся люди под сорок. Ты постсоветское эйджистское ведро с крабами / банку со скорпионами не проецируй на западный мир.
Го набирает популярность, денег платят много, лучше не завидовал бы и грёб баблос
> язык создали бумеры
Прав.
> причём уважаемые другими бумерами
Прав.
> создан он был тоже для бумеров
А вот тут ты неправ.
> Если не в курсе, в американских корпорациях на основных сеньорских должностях трудятся люди под сорок
Этот язык не создавали для сеньёров. Сеньёры пишут на нормальных языках, которые требуют работающей головы. Этот же "язык" - это станок для будущего пролетариата, т.е. порриджей. Простой, с минимальным количеством концепций, требующий минимальных знаний. Сел, выучил за неделю и на завод на галеру.
Алсо, при вкате желательно зп от 150к.
Какие тебе сложные концепции нужны?
В других языках из функции не нужно делать 50 ретурнов. В подавляющем большинстве случаев ретурн один, и менять его нужно только по делу.
>выучил за неделю и на завод на галеру.
Ага блять, за неделю. Из за этого "go way", много всякой нестандартной хуйни. Всякие специфические только для го паттерноы типа singleton dependency injection? multiton. Понимание того как работает GC (который блять меняется через каждую версию), понимание работы шедулера (та же хуйня, что и с gc), дохуища всяких нюансов для горутин, трэйсы etc. Это конечно не c++, которые можно всю жизнь использовать и находить что-то новое, но и не дажва или питон.
Какая уебищная система импортов тут, даже с локальным модулем лютая ебля
Ну так на него берут только с опытом в других языках, а с таким опытом итак бабла хватает и ты обычно уже бородатый
Странно, что те, для кого создавался этот язык должны страдать
> Всякие специфические только для го паттерноы типа singleton dependency injection? multiton
В мире го нет специфичных паттернов, особенно таких
> Понимание того как работает GC (который блять меняется через каждую версию)
Нет, не меняется. Немного допиливается, но базовая логика неизменна уже давно. Всерьез менялся только один раз.
> , понимание работы шедулера (та же хуйня, что и с gc),
Тоже, меняются только детали, типа как в 1.13 добавили шедулинг даже для залоченных горутин.
> дохуища всяких нюансов
как вообще в любом языке
> нюансов для горутин, трэйсы etc.
Го тура хватает на 90%, го тур + пакет sync так и вообще на все сто. Хз чё тебе там сложным кажется, как раз с горутинами проблем меньше всего, если один раз пройти мануал
Я концептуально с тобой согласен, что никакой язык за неделю не учится на про уровень, и го в том числе, но аргументы у тебя всё равно уебанские
>Нет, не меняется. Немного допиливается, но базовая логика неизменна уже давно.
Вот когда завезут суб-миллисекундный гц, как в жяве, тогда язык будет просто топ. Очень хочеца.
Пишут что угодно, это один из настоящий генерал пурпос языков
Чтобы преуспеть нужно или быть экспертом DDD, или крутить байты в кешах и гц вручную. К сеньерству должен уметь обе вещи
Как то размыто получается
Пишут джейсоноукладчики в микросервисном стиле. И кубер с докером. В общем, все, что связано с "облаками"
что за предвзятость? вот, ознакомьтесь:
- https://github.com/zyedidia/micro
- https://github.com/stretto-editor/stretto
- https://www.dolthub.com/blog/2021-06-21-copying-mysqls-dumb-decisions/
- болт и прочие хранилища иди сам по-гугли
- message queue тоже найдешь наверно
- https://blitiri.com.ar/p/chasquid/
- https://github.com/pokemium/Worldwide
- https://github.com/Thinkofname/steven-go
Очередь задач попадает в "все что связано с облаками".
Всё остальное - не целевое предназначение языка, хотя конечно написать можно что угодно. Но если так считать, то вопрос зачем нужен язык вообще смысла не имеет, потому что что угодно можно написать на чём угодно
Как правильно писать вложенные пакеты? В стандартной либе есть "net/http/fcgi", который импортирует "net/http", который в свою очередь импортирует "net"
С другой стороны есть "sync", который импортирует "sync/atomic"
> язык общего назначения
Понятие, описывающее несуществующее явление. Иначе был бы один язык, на котором писали бы все. И не надо отговорок про легаси.
Как они по смыслу вкладываются друг в друга, так и вкладывай в коде. Если возникнут кольцевые зависимости - будешь их разрывать
https://go2goplay.golang.org/p/bqxCBcv0jjV
А ещё, Роб Пайк, лично, мог соссать тебе на лицо, но он же не стал так делать, попробуй проанализировать почему так случилось
Бля, ну защо. Сделали бы хоть <> вместо [], как в жяве. Ну некрасиво же смотрится.
> как в жяве
Потому и сделали, что надо какое угодно говнище, лишь бы не как в жабе, даже если и не в ней это придумали. В котлине тоже эта шиза, но появляется в другом.
Парадигма-хуедигма. Хули так сложно сделаны констрейнты? Мне всего лишь нужен поинтер любого типа, который обладает парой методов. Нахуя мне 2 типа описывать, если второй тип это буквально что угодно?
Например, запрет static. Вместо него придумали companion objects, функции и ещё десяток костылей.
Понял, с тобой лучше не связываться.
Есть тут анон который разобраться с тем как рабоать с uniswap с го?
Тыщамиллионов вопросов.
Я тоже так думаю, потому что и гайдов не нахожу для нулей. Пойду в питон или js
А гайдов для сеньоров ты находишь? Перспективнее он блять ищет
Сделали как в питоне, норм.
От того, что на го пытались писать развесистую бизнес логику, а не использовали его по назначению
У говна нет и не может быть назначения.
Вопрос. Наступит ли момент, когда зорошо выучив Раст, я буду на нем задачи решать также быстро как на Го? Или псоле Раста всегда как после войны возвращаешься?
> Раст осень ноавится, но сложный
нет.
> Раст и Го вообще очень похожи
нет.
> и друг у дружка пиздят фичи
нет.
На самый главный вопрос не ответил =[
go get deprecates in 1.17 infavor of go install как думаешь почему? Потому что есть бодественный cargo install
Маленькая, но шустрая параша. Для себя кстати писал и консольные утилиты (например по поиску дубликатов боевых картинок)
and erekt
> Oliver Gould
кто это и почему его мнение должно кого-то интересовать?
> Buoyant
какое вообще отношение сила архимеда имеет к разработке?
Что выбрать лучше, Го или Раст для такой задачи и почему?
Можно приводить к размеру, скажем, 50х50 и сравнивать попиксильно. Больше 95% совпадения - считай одна и та же картинка. Похуй что сложность квадратичная, если тебе нужно запускать это раз в пол года
Выбери что лучше знаешь, vlc/ffmpeg либу можно вызвать из чего угодно.
Именно поэтому ты пришел в го тред? Просто признайся, что у тебя поджилки трясутся от того, что раст медленно умирает.
Создатели ARM-архитектуры - сатанисты, вот пруф
>+ возможность записи не 1-го стрима, а 2, 3 хоть 10 стримов одновременно
нахуя делать это в одном процессе? энивей, ебота с бесполезными фичами конечно же должна писаться на расте и не засирвать гошную экосферу.
го в принципе подхватить несложно. но сходств с петоном особых нет, которые бы упростили жизнь, скорее различия.
потому что юзабилити, не хочет конечный юзер писать баш-скрипт, а если он на виндовсе и у него нет wsl? программа не только качать будет, но и мониторить онлайн, при подрубке начинается запись и так прога висит 24\7 мониторит и авто-качает. ГОДНО!
Как в Go написать функцию, которая возвращает свой аргумент, но принимать она должна любые аргументы, в том числе функции?
Тебя забыли спросить. Такая функция есть в математике, называется функция тождества или identity function. Если в языке нельзя ее реализовать, то его место на помойке. Без этой функции не построишь некоторые хороших абстракций.
Зачем так категорично, дай ему шанс...
Аргумент типа "...interface{}", возвращает тип interface{}. Вот тебе и функция, ебись с ней как хочешь.
Работает вроде правильно, но слишком многословно. В голанг слаке показывали очень лаконичный пример без объявления структур и интерфейсов, только это было давно и ссылка не сохранилась.
Там можно и без структур с интерфейсами сделать, я просто люблю типы описывать.
Я про тип. А вариабля вообще объявлена на уровне функции, её и внутри пакета не видно.
спасиба сальдат, спасиба ветерань
А бля ложная тревога, я долбаеб хотел компактным его сделать как на 2 скрине в 1 строчку чтоб умещалось, но го говорит хуй ну лана, буду юзать 1 вариант
Что за либа то хоть? А то я попробовал javafx (да да мертвое говно) и ахуел на сколько все правильно, логично и реактивно в их экосистеме по сравнению с реактом и всем вебом. Жаль десктоп мертв.
уже устанавливал, но чет не сложилось у меня там и я хуй забил + с го как то все проще, тем более раньше его юзал, крч попробую пока на нем посидеть
а хуй знает, все еще выбираю из awesome списка. нашел пиздец простую для ui - fyne, для игор можно sdl или оч простой prototype. а так я на с++ winapi в основном юзал, qt, opengl и тд
https://github.com/lib/pq
Что тут за хуйня, где структуризация проекта, почему все в одной папке, тесты, документация, реадми, травис, вы ебанулись там?
Серьезные дяди на сишке так же пишут, структура это у всяких пхпшников и джавистов
Сишку деды дидов пилили, там этот архаизм можно понять, а тут что за говно? Чем им не угодило разбиение программы по модулям?
У Пайка нет объяснение? Он же так любит объяснять почему говно сделал.
Да похуй так то, я саблайм юзаю ибо быстро открывается, там настроил себе клавишу для билда и запуска программмы и збс че еще то надо
VSCode
Пацаны, как быстро два глаза сделать без ебучего ко?
А? А? А? Мааамууу ебал. А? А? А?
да я гений нахуй столько отсылок сделать фух ну все на сегодня хватит, лучше уже не будет расходимся
Хуйня какая то
> - В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)
>(есть на Русском)
че за пиздеж? нет там нихуя на русском, максимум на узбекском бля
так ОП пиздабол палучаица
А не похуй ли? Его дело -- сделать тред. Он как лентач -- инфу дал, а проверка на правдивость -- наше дело
туда, сюда, обратно, тебе и мне приятно
нихуя прикол
Раньше был, но на сайте он не работал, только локально.
Попробуй тоже локально запустить у меня не получилось, в последней версии go get golang.org/x/tour нихуя не работает
В любом случае ты не много потерял, т.к. map'у перевести как "карту" тебе и гугель тренслейтор может.
Хуй знает пацаны зачем вам эти гайды, я на википедию 2 раза зашел, там все в кратце описывается и мне этого хватило лол.
Ну, тур действительно хорош. Он превращает любого человека, который хоть как-то, хоть на чем-то умеет кодить (включая всяких васянов с вордпреса, петровичей с башем и так далее) в полноценных гоферов, которые могут прочитать практически любой код, благо конструкций языка не так и много, и они, в отличии от раста легко гуглятся, т.к. это ключевые слова, а не спецсимволы.
>они, в отличии от раста легко гуглятся, т.к. это ключевые слова, а не спецсимволы
Если бы это было действительно важно мы не жили бы в мире победившего си, и писали бы везде BEGIN; вместо {
Учитывая, что в Go эволюция вспять пошла, не удивительны были бы и BEGIN END. Будь воля Пайка, он бы так и сделал, но это бы отпугнуло потенциальных пользователей языка.
Ну не нужно совсем охуевать, нормально же общались.
пасиб
Не удивлюсь, если он переписывает код со второго монитора, и это его первый код на го в принципе
Только названия функций меняет, даже не зная, что снейк кейс не принятно использовать даже в константах
Есть адекватные видосы где реализуют такие простые вещи?
Слушаю фоном на 1.75 скорости, весьма простенько там всё, но я не знаю толком го, чтобы оценить, что он несет. Хочется блевать от слова прописывать по сто штук в минуту.
В середине видоса начался sql, этот дебич советует васянские сборочки лампа и пхпмайадмин для этого, лол.
Продолжаю наблюдения.
>В середине видоса начался sql, этот дебич советует васянские сборочки лампа и пхпмайадмин для этого, лол.
Ох какой стыд. Явно пхпшник, гоните его, насмехайтесь над ним
Хотя для полного нуля в кодинге может и нормально
>Как у го с перформансом?
Хорошо, для этого он и создавался.
>Могу делать эффективную числодробилку как на сишке
Да, вполне. Есть инлайнинг, есть escape analysis, т.е. часть памяти алоцируется на стеке, что на много дешевле чем в хипе. Прям как в сишке не будет, т.к. GC всё еще есть, да и вызовы функций обходятся немного дороже, чем в си за счет того, что планировщику горутин нужно делать свою работу на каждом(?) вызове. Но это всё экономия на спичках, ты не почувствуешь разницу, скорее всего.
>или максимально оптимизированны только спавн миллионов горутин
Если что - это всё еще дорогая операция. Дешевле, чем спавн треда, но всё же. Очень редко спавнят горутины динамически, зачастую создают n долгоживущих воркеров, которые читают что-то из канала, делают работу и отдают результат в другой канал.
> либы для взаимодействия с сеткой
Низкоуровневый нетворк довольно хорошо оптимизирован, да. Но работы всё еще ведутся. Сейчас идут разговоры о том, что надо изменить структуру IP адреса, т.к. старая использует слайс и это слишком дорого. Да и не по SOLID'у.
Но net/http плохо оптимизирован, его используют либо в маленьких проектах, где сервер это не основная задача процесса и когда важно сохранить маленький размер бинаря, либо просто для примера, как накидать что-то по быстрому.
> перекладывания жсонов
Стандартный пакет тоже не очень оптимальный, но лично я почти всегда использую именно его, т.к. не работаю в YOBA хайлоаде, где каждую алокацию считают.
go draw()
go update()
будет ли теперь все намного шустрее, чем если бы я просто вызывал их без go?
Корутина это не поток и не про параллельность, две корутины могут висеть на одном потоке, но в одно время на потоке будет работать только одна. Поэтому когда корутина делает долгие вычисления и не прерывается, другие корутины привязанные к этому потоку будут простаивать. Преимущество корутин видно только при сотнях тысяч блокирующих операциях, для time consuming операций они не подходят
Разве ГОвяный планировщик не оптимизирует нагрузку, что бы максимально возможное количество корутин выполнялось одновременно распределяясь на максимальное количество тредов/ядер? А то это
>Поэтому когда корутина делает долгие вычисления и не прерывается, другие корутины привязанные к этому потоку будут простаивать.
очень напоминает кооперативную многозадачность пистона того же и его корутин.
Я особо не углублялся именно в го, но когда последний раз пробовал долгие вычисления перевести на корутины, профитов не было. Тут конечно дохуя факторов. У меня были общие изменяемые данные и пришлось юзать мьютексы, потом перевел на каналы, менял количество корутин, но было либо так же либо хуже.
Может именно мой случай, того анона не отговаривать попробовать самому.
> очень напоминает кооперативную многозадачность пистона того же и его корутин.
Они наверно везде такие и есть. В шарпе и котлине это тоже самое. Пул потоков, корутины (по сути задачи) и диспатчер, который переключает условный контекст корутин, когда прошлая задача прервалась/кончилась.
Хейтер, плиз.
Человек задал вопрос, я на него ответил, что если хочешь выжать максимум производительности - нужно изъебываться, использовать нестандартные реализации для вещей, которые есть в стандартной библиотеке, писать оптимальный код и т.д. Я подошел к вопросу как инженегр, ответил про подводные камни. Я же не маркетолог, чтобы только нахваливать продукт.
Сложно сказать в общем случае, такие вещи нужно смотреть предметно. С одной стороны ты таким образом можешь задействовать 2 CPU, что может быть полезно при большем количестве вычислений.
С другой - ты тратишь дополнительное время на синхронизацию (ты же отрисовываешь на основании результата вычислений, не так ли?), по этому в ряде случаев это может работать хуже, чем просто в одной горутине обрабатывать и то и другое.
Ты там ebiten'ю балуешься? Выводи TPS, попробуй оба подхода. Вангую ты не почувствуешь разницы для своих задач, только код зря усложнишь.
>очень напоминает кооперативную многозадачность пистона того же и его корутин.
Не совсем так. В Питоне GIL, что означает, что фактически у тебя только один ос тред работает. А в го m:n планировщик.
Тип выводится во время компиляции, в рантайме разницы нет
>Корутина это не про параллельность
>У меня были общие изменяемые данные и пришлось юзать мьютексы
Ну не используй общие изменяемые данные и мьютексы и корутины будут про параллельность
Как будто так обдрачиваемый за свою параллельность хаскелль принципиально отличается дизайном планировщика от других планировщиков
Как Ebiten билдить для других пк? go build -ldflags -H=windowsgui робит только на собственном пк, на других тупо не запускается.
А хуй знает как, вчера гуглил про всю эту хуйню как на другие пк билдить и чето нихуя
Вы ещё не поняли, что как раз из-за такой хуйни пщ хуёво подходит для других задач кроме бэкенда? Нужен десктоп - берите кресты или шарп.
Идеальный вариант это фоновый процесс и вебморда, ящитаю. И разрабатывать заебись, и кроссплатформенно.
Хуй знает, либа для удобной отрисовки в консоль на других пк робит, а gui всякие чет не особо, много ебли
Язык создавался как прослойка между Раджешем и гугловскими сервисами. Какая нахуй графика, мань.
ну и че, лисп тоже создавался хуй знает для чего, а в итоге на нем gui и игоры довольно легко пилить если ты не долбаеб, а компиляция совсем уж простейшая
Те же, что и для веба, очевидно.
Вы ещё не поняли, что как раз из-за такой хуйни shared library это пержиток прошлого и должны отмереть во имя кроссплатформенности?
>Я правильно понимаю, что лучше всего, вместо := использовать var x int ради оптимизации?
Ну, оптимизация у тебя будет только если заменишь := на каждой итерации цикла на объявление переменной вне цикла (не важно, через := или var), и затем её будешь переиспользовать. Но это экономия на спичках, и увеличение области видимости переменной, что всегда плохо
Не пробовал, я под wasm собираю.
>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у скомпилить под винду можно (из под линукса/мака)
Только не забудь компиляторы скачать и настроить.
Гофаны, посоветуйте годный query builder/ORM для SQLite. В идеале с кодогенерацией миграций и бойлерплейта из моделей. Делаю домашний проект, а голый SQL с васянской обвязкой вокруг я уже работе слишком устал писать.
Пиздос, вот в этом то и загвоздка, у всех сука библиотек гайд как скомпилировать под винду из линукса, а как нахуй из винды для винды хуй его знает блять пиздец просто охуеть в рот ебал, пизда
Ну охуеть теперь
wsl, cygwin
Гофноедам не привыкать
Короче ебать нашел спасение в Windows Application Library Kit, там manifest только с exe надо тащить и заебись, на других пк все запускается, ахуенно, а я уж думал не существует адекватных либ.
https://play.golang.org/p/uIUit5mZSBG
- https://github.com/Masterminds/squirrel
- https://gorm.io
еще тут можешь по-выбирать сорты говна https://github.com/avelino/awesome-go#orm
> а как нахуй из винды для винды хуй его знает блять пиздец просто охуеть в рот ебал, пизда
Так, ёбана, пожди. Если что-то собирается и работает на твоей винде и не работает на другой винде - значит скорее всего дело в зависимостях. Ты кроме го что-то устанавливал для разработки? Я в виндусятине не понимаю вообще ничего, но тут, вроде, не в го дело.
В том то и дело, что я в рот ебал всякие cygwin, wsl, mingw64 устанавливать ради ебаной компиляции, я вон уже нашел либу для gui и там ниче из этого не надо, тупа go build и заебись, так и должно нахуй быть, без всякой лишней ебли.
Да я по нему пронесся галопом по Европам. Сейчас повторно прохожу и конспект делаю
Помню, читал что-то питонячье так там set был переведен как "набор", "карты" тоже присутствовали. А после того, как столкнулся с переводом слова state как государство, блядь, перестал читать доки на великом и могучем
Если ты несмышленое малолетнее быдло ньюфажек, то твой естественный выбор - петухон или жопаскрип.
Почти везде нужен sql
МакДональдс работает конкаррентно например.
https://fastapi.tiangolo.com/async/#concurrent-burgers вот на примере "ты пошёл с тяночкой в бургерную", не обращай внимания что это дока к либо от питона, просто там автор ахуительно объяснил почти за весь async-мир.
Для завода специальное образование нужно, а в пщ можно хоть с 9 классами вкатываться.
на го зарплата больше
какие еще годные игры есть на go?
Тебя даже вчерашний шторм не разбудил https://blog.jetbrains.com/go/2021/06/09/how-to-use-go-embed-in-go-1-16/
Как написал >>095772, но они планируют переезжать на https://github.com/OpenDiablo2/AbyssEngine который использует go-sdl2
>>095784
Оно еще и рейсит как тварь
>>095736
https://daigostudio.com/bearsrestaurant/en/ и по сути всё, го не лучший вариант для создания игр, разве что по фану или как PoC
Что на собесе спрашивали, анон? Какие типичные задачи на работе?
Для ААА-игр - не лучший, так как соответствующих движков нет, а для 2D-игр - лучший.
>лучший
По каким критериям судишь? Я вот смотрю, что примеров готовых проектов почти нет, стаей на эту тему не то чтобы много, видосов на ютубе вроде и много, но в сравнении с плюсами - считай что нет
Пиздец, как ты на работу устроился-то с такими знаниями?
что выбрать?
вроде на первой еще куча энтепрайза пишется
на го только озон видел и кучу ноунейм говнеца
но озон в то же время на жабе стартует новые проекты
вобщем че выбрать для вката в бекенд?
> Как понять конкарренси?
Это не совсем правильный вопрос. Правильный вопрос: "как понять примитивы синхронизации". Хотя и это далеко не всем надо, на практике в большинстве случаев тебе с головой хватит нашего аналога Promise.all https://pkg.go.dev/golang.org/x/sync/errgroup#WithContext
> Кто такой этот ваш контекст?
Если бы ты прошел тур, ты бы знал что в языке по дизайну заложили возможность передачи сигнала о завершении другой горутине через закрытие канала. А контекст - это просто врапер над этой механикой + пара других фитч
>>096315
>java vs go что выбрать?
Бери джабу, если от нее не воротит. Я фанбой го и всё на нем делаю, но объективно кроме кукроача, докера и кубов в нем нет крупных экосистем. А на джаве целый мир кровавого ентерпрайза. А чтобы писать без фрустраций на го нужно понимать для каких целей язык создавался и какие проблемы должен решать. Да и вакансий на порядок, а может даже на два, меньше чем в жабу
Поможет запихнуть в бинарь ассеты.
Но то, что ты ищешь называется "статическая линковка" и далеко не все go враперы над C/C++ умеют в это. А от мозгоебли с кросс-компиляцией так вообще охуеть можно.
Охуеть, нормальная структура проекта, еще бы тесты в отдельную папку вынести.
Гоферы, почему половина awesome проектов не имеют структуры как таковой? Я уже выше скидывал подобное https://github.com/lib/pq, у вас что, подобное плохим тоном не считается?
Я бы жабу выбрал. С последующим переползанием в скотлин
Го от слова говно.
пришел запрос на хуйню @ надо дернуть пяток-другой сервисов @ скомпоновать и отдать результат
Никаких.
Как на експресе не получится. Будет ебля с ждейсонами, чтобы обработать все 100500 случаев типа "а если клиент строку вместо числа педераст".
А разве на го нет каких нибудь либ, которые проверят соответствует ли жсон определенной структуре и выведет все ошибки каким нибудь методом .Validate ?
Мне HTML странички гененерировать динамически, но и resful тоже. Интерпретируемые языки пошли нахуй, сервер на малине, меньше оверхеда - больше клиентов, меньше падений.
Зачем энтот ваш Go тогда нужен, вроде написано, "for building network applications" и лямбды с асинками есть. Это троллинг? Где готовые фреймворки? Не изобретать же мне велосипед начиная с сырых сокетов.
Мне роуты развести надо, подключить дб, шаблонизатор и кеш страниц, всё.
Чё мне делать теперь.
аниме_девочка_обнимает_колени_и_плачет.jpg
Ты же ленивый, даже загуглить не можешь, может нахуй тебе этот веб-макакинг?
>роуты развести надо
gorilla mux
>подключить дб
gorm
>шаблонизатор
go template / sprig
>кеш страниц
Без проблем самому запилить, но уверен уже есть готовое решения.
Всем надо решать одни и те же задачи, и тулинг один и тот же. Странно, что до сих пор не высрали аналог джанги или спринга, ведь фреймворки оказались не так уж и не нужны.
>до сих пор не высрали аналог джанги или спринга
В мире го так просто не принято. Это ведь замена С/C++ с синтаксическими фичами, легковесными потоками и сборщиком мусора, который умеет без виртуальной машины работать.
Ну ты сначала этот jsoniter попробуй потыкать, и поймёшь.
В std парсер делался максимально удобным — хуяк структурка хуяк жсон.
А эти либы — куча ебли и плясок с бубном ради хуй пойми чего, JSON — это про удобство, а не перформанс. Когда нужен перформанс — берут бинарные форматы, и гоняют данные в них. В них и сериализация/десериализация быстрее самого быстрого парсера жсона, и весят они меньше.
>Когда нужен перформанс — берут бинарные форматы
Это не всегда возможно, потому что твоя система может интегрироваться с десятком других, которые понимают только жсон и менять формат не собираются. Вот тут-то и нужны быстрые парсеры.
А jsoniter - годнота, он совместим со стандартной либой, поэтому пользоваться не сложнее.
>Странно, что до сих пор не высрали аналог джанги или спринга
На ГОвне писать БОЛЬНО, даже после жабы, чувствуешь, как тебя ломает архаичность языка
На питоне тоже нет полноценного асинхронного фреймворка, где все из коробки идет.
А надо было просто в vala корутины завезти, получился бы "тайпскрипт" для сишечки
Сам ты шизик. Вoт прикручу к вале веб фремворк на libuv и разрекламирую у хипстеров на конференциях. Ты еще рыдать будешь, что раньше на валюше не писал!
Удачи, няша :3
Опять же это фреймворк уровня фласка, роутер + валидация данных.
А все потому что для серьезных проектов не нужен фреймворк уровня джанги или спринга, это пережиток прошлого, такие решения всегда будут медленней чем сампописная обвязка вокруг микрофреймворка.
MVP можно сделать на джанге, а потом взять го + асинхронный питон и запилить микросервисы. Сейчас на таком проекте работаю.
Смотря что такое "серьёзный проект", если это махровый хайлоад, то может и быстрее. В остальных случаях это будет тупо велосипедостроение, в результате получится медленнее и ненадёжнее, чем фреймворки, которые так любят критиковать в этом треде.
>Для начала работы мы предоставляем деньги на счете в сумме 12 500 РУБ
https://azure.microsoft.com/ru-ru/develop/go/
>В остальных случаях это будет тупо велосипедостроение, в результате получится медленнее и ненадёжнее, чем фреймворки, которые так любят критиковать в этом треде.
Нифига, в той же джанге нет никакого рокетсаенса, у нас например есть самописная асинхронная джанга из которой мы выкинули ненужные нам фичи, все работает очень стабильно. Так же мы выкинули celery из за лютого оверхеда и написали свое решение, а потом дописали го реализацию. Я хз про какие велосипеды ты говоришь, наоборот код стал максимально простым без лишней магии.
Зарегистрируешься и увидишь, что сервера/сервисы дают не бесплатно, а за определённую стоимость, которую списывают с кошелька, на котором изначально стартовые 12500. Так у многих хостеров, есть стартовая сумма, которую можно потратить в тестовых целях, а дальше только пополнять кошелёк реальным деньгами.
И не найдейся потратить их на что-то ещё, это как в той шутке про вывод денег из GTA
Гофаны, кто-то знает имплементацию http.CookieJar'а, которую можно нормально серилизовать? Ебать cookiejar.Jar рефлексией нет ни малейшего желания.
Ты хуйню какую-то делаешь, используй мапу или напиши свитч/кейс.
Но если хочешь страдать и говнокодить, говнокодить и страдать - используй reflect.Value.FieldByName()
Человек с такім ебалом должен пісать на жопаскріпе
То же, что и в любом другом языке - имиджборду, форум, интернет-магазин, веб-кравлер и так далее.
Ты будешь удивлен, но в го никто(почти) не вкатывается первым языком программирования без опыта в вебе)))
>Как в го камунити относятся к вкатунам из других языков с опытом работы в вебе?
Нейтрально/положительно
> Вот я повидло 3 года пиашпи
Судя по опросам где-то от трети до половины гоферов имеют либо точно такой-же, либо очень похожий бекграунд
> если подрочу петпроджекты
Попробуй что-то сделать, где ты сможешь активно использовать каналы, контекст и прочую синхронизацию, например в чатике на вебсокетах.
Угодили, впилят.
Ну и ладно, я сам дед
Бог создал землю за 7 дней, а мистер Пайк не смог уложиться в такой широкий срок
Сравнил бога с Пайком.
Откуда информация про неделю? Или это необоснованный вскукорек?
А как ты без дженериков сделаешь нормальный ORM? Либо кодген, либо ебись в пустые интерфейсы
Есть третий вариант - забить хуй на го. Но не могу, что-то притягательное есть в этом минимализме
Уебывай в питон или жабаскрипт
Так в го и так ведь утиная типизация, когда с интерфейсами работаешь
G R O O V Y
Технология бесит какая-то - не используешь ее просто
Го вообще шутники проектировали.
>Как быть с миграциями?
Смотря, что ты понимаешь под этим словом. У меня просто в отдельном месте лежит sql файл, в котором прописано все create'ы и insert'ы, через него и делаю миграцию. Советую тебе посмотреть реализацию готовых приложений, там все ультра-понятно с чистейшей архитектурой.
>Смотря, что ты понимаешь под этим словом
Гошники не знают, что такое миграции? Пиздец каменный век
>прописано все create'ы и insert'ы
А если надо будет откатить?
Пишутся 2 файла up_001.sql и down_001.sql и так далее.
Неа, не хочется, после Раста не хочется. Ты знашеь что в Расте где-то около 5-6 разных стрингов? String, &str, Strings::from, PathBuf и to_string() и т.д. Сущий ад, как же заёбывает конвертировать их туда-сюда.
После Питона очень даже кайфово.
Какие задачи решает T[any T] которые не может решить ( a...interface{}) ?
>А если надо будет откатить?
Он спросил как делать миграцию, механизм сохранения, отката миграций, етц, можно за один вечер навелосипедить, либо взять уже готовое решение. golang-migrate
В го ты тоже можешь изъебнутся с билдерами, буферами, через unsafe.Pointer достать StringHeader и за 0 алокаций конвертировать его в слайс и так далее.
А типобизопасность вместо ошибок в рантайме у твоих пустых интерфейсов тоже есть? Если нет, зачем вообще писать на статически типизированном языке?
Для вас это должно быть раз плюнуть, покажите состоятельность.
Заодно можно взять принт и показывать бабе Сраке.
Зачем нужна пдфка, если все и так доступно онлайн? Или у тебя в глуши интернет по часам?
В модели храни только интерфейс репозитория, а саму реализацию сторера со всеми селектами/инсертами с миграциями и настройкой конфигов БД в отдельном пакете типа store разумеется все на чистом SQL, goway все дела. Заодно потом добавишь нормальные моки репы для тестов модели, используя этот же интерфейс.
Адрес БД и прочие параметры передавай в сервис через env/yaml/toml, затем это дело считывай в main-горутине, из нее же подключайся к БД и накатывай миграции, после чего инициализируй и раскидывай свои стореры по моделям только не наплоди инстансов на каждый воркер, по одному стореру на таблицу (ну или 2-3 связанных) через синглтон!.
Для самих миграций посмотри https://github.com/rubenv/sql-migrate
>В модели храни только интерфейс репозитория
Ты там active record делаешь что-ли? Я просто к DDD/hexagonal architecture привык, там модели вообще ничего не импортируют, наоборот, вместо это все остальные слои импортируют модели
>наоборот, вместо это все остальные слои импортируют модели
Да, все так, я просто не очень корректно выразился. Сигнатуры функций репозитория описываются именно в модели вместе со всеми интерфейсами (мы обычно их сразу после интерфейсов самой модели кладем, чтобы далеко не ходить), с которыми модель и будет работать вместо прямого импорта сторера.
А стораж уже импортирует эту модель и повторяет сигнатуры у себя, можно даже использовать что-то вида статик-чека, чтобы проверять модель на адекватность и не обосраться в рантайме:
var _ model.Repo = (*Storage)(nil)
Если ты студент старших курсов, то вкатывайся через стажировки озона/мейла/вайлдберриз и т.д. У меня коллега так стал гофером через одну из этих компаний, миновав все остальные языки по пути к нормальному миддлу (но SQL, HTTP, алгоритмы, паттерны и прочие используемый в бэке-технологии надо разумеется знать). Главное, потом вечным жидом джуном не стать, как чел на пикче.
Тоже где-то на хабре читал про ебанутые собесы в этих парашах.
Алсо, пик-пиздеж, или реально есть в природе такой еблан?
Просто джуном не надо начинать в больших фирмах, где на метрики дрочат и чуть что за дверь выставляют. Я отработал полтора года в мелкофирме, где этим не заморачивались и с комфортной скоростью дообучался а потом перекотился от них на мидла в другую фирму
тоже вкатыш. и чо нам без вариантов просто пройти на хуй?
Двачу совет, сам сейчас занимаюсь веду стажировку в одной известной крупной компании, готовы брать вообще всех с попытом других языков и желанием изучить го, но да, требуем понимания
> SQL, HTTP, алгоритмы, паттерны и прочие используемый в бэке-технологии
Задавайте вопросы, если интересно, что могу - расскажу
> не обосраться в рантайме
Каким образом? У вас там какое-то хитровыебаное DI через пустые интерфейсы?
> var _ model.Repo = (*Storage)(nil)
Обычно такой код пишут чтобы ошибка компилятора была попонятнее и поближе к имплеминтации, а не к месту использования.
Что подразумевается под "пониманием"? Например, про какой-нибудь solid я слышал, но не применял его. Все, меня отсеили?
>>107278
Провожу собеседования и подготовку к проектам
>А, еще важный момент - один из самых важных скилов - это знание английского. Без него шансы падают быстрее чем от всего остального вместе взятого. Аутсорс, всё-таки, просто читать документацию не достаточно, нужно уметь еще раз в 2 недели мук-пукнуть заказчику что ты делал всё это время.
И зачем вы нужны, если можно напрямую работать?
Почитай пару статей в гугле по ключевым словам SOLID Golang, и довольно быстро поймешь, что практически все принципы удобно ложатся в классическую разработку на гошке. Разве что наследование меняется на композицию, а инкапсулировать код приходится внутри пакетов с lowerCamelCase. Ну а интерфейсы это основа основ Go, которые реализуют те же буковки LI.
Как бывший сишник скажу, что по солиду и ООП я могу хоть на K&R C писать, инкапсулируя все в файлах через глобальные статические определения переменных и функций, а вместо пустого интерфейса использовать каст к (void*). SOLID очень универсальная штука, знать ее крайне полезно
Я не он, но коммуникацию кто будет поддерживать? Кто будет кабанчиком подскакивать на звонки-встречи для принятия очередного соглашения по очередному вопросику?
Ты? Если тебя заставят с людьми разговаривать(на инглише!) вместо написания кода, у тебя подрумянится попка и задрожит голосок.
Без дяди ты не справишься.
>>107337
SOLID же просто про здравое применение ООП, не?
>Я не он, но коммуникацию кто будет поддерживать? Кто будет кабанчиком подскакивать на звонки-встречи для принятия очередного соглашения по очередному вопросику?
Так он уже сказал, что с кабанчиком все равно говорить придется и вопросики обкашливать и отчитываться. Я бы понял, если бы они не знали о друг друге, а тут уже нихуя не так.
>Провожу собеседования и подготовку к проектам
И на что в среднем может рассчитывать перекатыш из другого стека с опытом около 5 лет? С паттернами, солидом, граспом и законом Деметры дружу. Могу пояснить по хардкору за сложность алгоритмов. Ну и весь остальной фарш в виде баз данных, разных хранилищ и брокеров сообщений в комплекте
>Могу пояснить по хардкору за сложность алгоритмов
Когда два раза по входным данным проходишь это 2N?
А если сначала n^2 проходится, а потом 2^n то какая сложность?
Мы вам перезвоним
Сука, такое у меня ни разу не спрашивали.
На самом деле может быть и 2N (например, если мне надо найти два символа в массиве, и я вместо сравнения каждого символа с двумя искомыми прохожу по массиву два раза - число операций неизменно и растет линейно). Ты не привел конкретного примера.
То есть если в 2^n алгоритм засунуть прохождение массива n^2 раз то он станет быстрее?
Если ты то чел, который говорил про то, что можешь по хардкору про сложность алгоритмов пояснить, то да
Да, но затем Вселенная схлопнется со звуком пизды
Да куда мне по хардкору-то...
А теперь давай ответ в зал!
>>107445
Ок. Рассмотрим мой пример подробнее, вкатунцы: дан массив - '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, то есть сложность линейная.
В чем я не прав?
Тебе уже раньше правильно ответили. Сложность алгоритма будет равна сложности самой медленной его части, то есть 2^n. Можешь хоть десять квадратов засунуть в него, ничего не поменяется.
Макаба съела знаки умножения, но вы же умные, догадаетесь.
А если алгоритм сначала проходит n^3, а потом n^5, то сложность будет n^5?
я просто проиграл с того, как тот уверенный хардкорный анон слился, когда кто-то в интернете сказал, что он не прав
Кто слился? Ты слился, епта! Я тебе отвечал, пока ты не завел сказку про белого бычка.
>Я тебе отвечал, пока ты не завел сказку про белого бычка.
Ну так хуле другой анон за тебя сказал, что я хуйню несу?
А я уж надеялся, что заблуждаюсь, потому что сам частенько рассчитываю сложность тупо по количеству циклов.
10, это еще в школе было
Не понимаю, причем здесь это. Исходное утверждение было "Когда два раза по входным данным проходишь это не 2N", и в этом примере мы дважды проходим по массиву, но суммарное число операций растет линейно. Причем здесь константы?
Ну, мук-пукнуть 1.5 минуты раз в 2 недели это не то же самое, как решать вообще все вопросы и постоянно
>>107387
Ну мы в целом на ждунов нацелены, но в твоем случае тебе могут дать месяц на изучение го (частично самостоятельного, частично вебинары) и затем сразу лычку мидла и за весло.
>>107374
Диванон же
>Ну мы в целом на ждунов нацелены, но в твоем случае тебе могут дать месяц на изучение го (частично самостоятельного, частично вебинары) и затем сразу лычку мидла и за весло.
Скинь название конторы на почту martinточкаalekseevich на протонмейле
да какой диванон, ты что директор что ли, и зачем кому то это нужно вообще? не жмоться, тут многие ищут варианты работы наверняка
Как и во всех крупных компаниях - всё зависит от проекта/подраздела, раз на раз не приходиться
Ты понимаешь что тебя за софтскилили? Причем самым тупым образом. Ты уже согласился, что ты веб макака и начал оправдываться, что делаешь, что-то не так только потому, что кто-то другой писал с уверенным видом. И это сделал рандомный анон с желтыми блинами из интернета. Ты хоть представляешь что с тобой матерый кабан сделает?
мимо червь из яндекса
Кстати, раньше на лендингах яндексовых вакансий были фотки с маками, а сейчас что ни подсовывают хрюшки, то сотруднички с леново всякими сидят, то за пеками с но-нейм мониторами
Все, инвестиции в разработку закончились, надо помогать нашим братьям меньшим с такси и доставок?
Так у тебя легаси, там на новых лендингах вообще фоток нет, да и при утсройстве на РАБоту ты выбираешь какую операционку хочешь
Если не обновлять при старте программы сид, то каждый раз будут одинаковые значения
посоветуй как выучить алгоритмы хотя бы до уровня прохода собесов в ВБ, авито и прочие. Серьёзный вопрос.
алсо я повёлся на сайт с задачками тип литкода за сто бачей и уже почти купил. Насколько такое говно вообще помогает с прохождением собесов?
Лол, литкод даже синьоры гриндят
Тут надо разделять алгоритмы и решение задачек, немного разные скиллы, на алгоритмических секциях нужно немного знания асимптотики и умения решать задачки без ide, потренироваться можно на литкоде, хватит и 20 для озонов и авито, для яндекса 50-70 тоже за глаза хватит. Уровень изи/медиум, но ориентируйся на медиум. Обычно задачки на манипуляцию со строкой, или применение мапы.
Но опять же, базовое знание алгоритмов и структур данных тоже нужно. Грокаем алгоритмы вроде норм, как советует анон, думаю хватит, но сам не читал.
>Насколько такое говно вообще помогает с прохождением собесов?
Помогает очень сильно, просто набраться уверенности и набирать код без автодополнения, обрабатывать граничные кейсы, без практики шансы завалить повышаются, но это скорее относиться к яндексу/джуму, для остальных и так хватит. Покупть офк ничего не нужно, там полторы концепции на все задачи. Вот тут есть все техники, если прорешаешь можешь смело пиздовать на собес: https://www.yourdevopsguy.com/how-to-learn-data-structures-and-algorithms-20-problem-solving-techniques-you-must-know/
у меня проблема с этой книгой в том, что она слишком простая для меня. При этом Кормена тоже не хочется читать. Так и сижу-пержу
Бамп вопросу. Неужели сделали дырку в типах в виде пустых интерфейсов, но даже ее не получилось сделать достаточно гибкой?
Наверное, чтобы писать user.Service вместо более длинного user.UserService. Чего только шизики не придумают.
Бля, я точно шизик. Забыл, что без имени пакета при вызове не обойтись
Можно через импорт с точкой.
Ты какую-то динамическую дрысню хочешь сделать, а тут так не принято. reflect.ValueOf(fn).Call должно помочь, но скорее всего ты просто делаешь что-то не так
>а тут так не принято
А interface принято делать? У вас тут буквально утиная типизация смешаная со статической.
>>109772
Не совсем тебя понял, все равно я не могу новую функцию вызвать потом, так как что бы это сделать в возвращаемом значении требуется указать сигнатуру, а декоратор должен принимать любую функцию
Нет, что бы была функция высшего порядка, которая может вовзращать другую функцию без явного указания сигнатур
Exactly
А гоферы начинают догадываться, что единственный способ обработать ошибку - показать её текст пользователю. Осталось в ошибку добавить инфу о том, как дошло до вызова этого кода, и получится эксепшен со стектрейсом.
После неудачного переката в го несколько лет назад тоже ходил гаденько срать в го треды. Потом отпустило
Как можно неудачно перекатиться в го? Или ты пикрил?
Вообще в го сейчас по сути бесконечные деньги, раз стажерам озон платит 90к, а джунам под 200.
Я перекатился и нашел работу. Но не сработался с тимлидом, который все мои начинания заворачивал нахуй с мантрой "здесь так не принято".
А зачем что-то начинать? Ты ведь обычная макака-исполнитель, а не творец. Тебе сказали делать хуйню - ты ее делаешь. Зачем что-то придумывать?
какая разница if err != nil или try catch catch catch ? никогда не понимал эту претензию к го
Catch не пишется после каждого вызова,, обработка ошибок отделена от основной логики, что в разы упрощает код.
Иди нахуй.
> Осталось в ошибку добавить инфу о том, как дошло до вызова этого кода, и получится эксепшен со стектрейсом.
Уже есть, в пакетах, кхе кхе
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
try {
}
catch(e){
}
if err != nil {
}
Нет.
> эксепшены созданы, чтобы пробрасывать контекст ошибки вверх по стеку для ее обработки
> ошибки в го созданы, чтобы пробрасывать контекст ошибки вверх по стеку для ее обработки
)))))))))))) go-way
Уверен процентов на 90, что если и завезут эксепшены, они будут только checked, учитывая наивную идею Пайка, что все ошибки всегда можно обработать на месте.
Ну выскочил IOException. Что ты с ним сделаешь? Выведешь пользователю информацию о том, что "IO error occurred"? По моему никакой разницы нет между тем, чтобы насрать юзеру в лицу стектрейсом или отдельным сообщением.
Это в каком языке так? В шарпе, жабе, петухоне и жопаскрипте исключения ловятся на верхнем уровне, оборачиваются в жсон и отправляются на фронт.
>В шарпе, жабе, петухоне и жопаскрипте исключения ловятся на верхнем уровне
В жабе есть checked exceptions. Зачем они были придуманы я до сих пор понять не могу, ну вот как проверяемое исключение IOException можно обработать на месте? Никак нахуй. Приходится указывать что такой-то метод throws IOException. И вот это IOException ловится на верхнем уровне, оборачивается и отправляется на фронт. Нахуя были нужны лишние телодвижения, не понятно.
> Остановлю выполнение логики на том уровне, где она не должна быть продолжена
> Залогирую имея больше информации о происхождении этого контекста
Прям как с исключениями.
> Макакер, спок
Слив засчитан. Впрочем, ничего нового
Я про исключения и говорю, если ты до сих пор не понял
>А гоферы начинают догадываться, что единственный способ обработать ошибку - показать её текст пользователю.
Просто попробуй работать в чем-то отличном от ООО "Рога и Копыта"
Может тогда тебе и понадобиться что-то вроде retry, а может даже всякие сircuit breaker'ы или graceful degradation'ы. И да, пользователю ошибку вне пхп никто не показывает, максимум возвращают четырех- или пяти- значный код, который сводиться либо к 4ХХ, либо к 5ХХ-м ошибкам. А вот в лог записать - это милое дело.
>>110538
Нет, т.к. нет задач, которые они смогут решать.
Никто в 90 году не предполагал, что обезьянам создадут весла для галер
>Остановлю выполнение логики на том уровне
Как остановишь? Просто сделаешь return в методе и во всех методах выше по стеку чтоли? Нах?
Не лучше ли сделать так, чтобы исключение вывалилось наверх и написало пользователю, что "произошла фатальная ошибка, идите нахуй"?
Например сервис обращается по сети к другому серверу, но внезапно оказывается, что тот сервер умер, либо какие-то ошибки в подключении к нему. Произошел IOException. Как его обработать? залогировать и выбросить юзеру, пусть он смотрит, пидорас ебаный
>Может тогда тебе и понадобиться что-то вроде retry, а может даже всякие сircuit breaker'ы или graceful degradation'ы
И все это есть прокидывание ошибки на верхний уровень, где ее можно обработать, то есть как с эксепшеном, дебилушка.
> Как остановишь? Просто сделаешь return в методе и во всех методах выше по стеку чтоли? Нах?
Посмотри как выглядит try catch пожалуйста и не еби господам мозг
> Не лучше ли сделать так, чтобы исключение вывалилось наверх и написало пользователю, что "произошла фатальная ошибка, идите нахуй"?
> Например сервис обращается по сети к другому серверу, но внезапно оказывается, что тот сервер умер, либо какие-то ошибки в подключении к нему. Произошел IOException. Как его обработать? залогировать и выбросить юзеру, пусть он смотрит, пидорас ебаный
Одно другому не мешает
Не знаю, а ты срешь го или защищаешь?
>Посмотри как выглядит try catch пожалуйста и не еби господам мозг
Про unchecked эксепшены ты не в курсе, видимо.
Хуй тебе, а нн лоад.
>2021
>До сих пор нет множеств и очередей
Ебаный кошмар, кому пришло в голову сделать облегченный С++ с модными молодежными потоками и слайсами, но с пустой стандартной библиотекой? Почему в STL есть все, чего только душа пожелает, а здесь нужно изобретать свои кривые велосипеды? Нахуя, а главное зачем?
Некорректно сравнивать Go с крестами. У говна не было задачи конкурировать с ними, пусть он и компилится в натив. Сравнивать его надо с жабашарпами, но и по сравнению с ними он убрг и примитивен.
В жабе кстати женерики тоже не с первых версий, там до их добавления юзали Object.
бамп
>Сравнивать его надо с жабашарпами
Разве Го можно втянуть в энтерпрайз, где куча бизнес-логики, для которой нужно полноценное ООП, а не просто структуры, пришедшие из чистой сишки?
>Некорректно сравнивать Go с крестами. У говна не было задачи конкурировать с ними, пусть он и компилится в натив.
Мне вроде кто-то пытался объяснить, что Го - это такой C/C++ (наверное все-таки больше С) для дебилов с модной многопоточкой.
Ну в этом и проеб джавы, потому что сейчас дженерики там существуют только на уровне компиляции, а потом стрираются в Object. В шарпе дженерики были сделаны сразу иначе.
Ну нужны - берешь быстрый. Платишь за это отсутствием сахара и более сложной работой
Перечитай мой пост еще раз. Если ты не понял, не всегда приходится платить удобством за скорость.
Тот, кто хостил русскую версию - забил хуй и хостинг слетел
Никому не усралось ломать язык меняя его фундаментальную основу. Уже 10 лет кормят женериками, покормят еще 10. Как раз срок жизни подойдёт к концу. А потом можно будет и новый заебенить.
Хватит пиздеть пиздабол, вилка в озоне на мидла 264к до налогов, после налогов получается 229к, и это притом что в озоне нет премий нихуя, только RSU с вестингом через год
Это копия, сохраненная 30 июля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.