Тред про лучший в мире язык GO №12 /go/ GO (а также Golang, Пщ или просто Го) — язык с зелеными потоками на уровне синтаксиса и приемлимой стандартной библиотекой. Так как делать пакеджи не очень сложно, гитхаб полон пакеджами для абсолютно всего и разного качества.
Сремся за отсутствие дженериков и ООП, смеемся с реализации дженериков в go2, спорим о том, какими скобочки должны быть на самом деле, пробрасываем ошибки, пытаемся понять почему код с каналами и многопоточностью работает медленнее, чем однопоточный код, находим по каждому крупному багу и косяку в языке пост в блоге го, который объясняет, что это фича, ищем обоснование, зачем дженерики не нужны, смеемся над оопэшниками, которые не могут жить без ексепшенов и DDD, дженериков и размазанной бизнес-логики, ждем, когда нам подвезут аналоги эксепшенов и дженериков
>>1744542 В C++20 завезли модули, в популярных компиляторах уже реализовано. А чем тебе хедеры не угодили? Разделение интерфейса и реализации практикуется много где.
>>1744542 но ведь прототипы документируют код лучше документации (которую никто не пишет)
Вот есть у меня огромный класс из какой-то либы на С++, открываю заголовок и вижу какие у него методы и члены. И какие аргументы нужны для методов и т.д.
Вот в других языках такого дико не хватает. Там все вечно в говне, в одну кучу свалено, задалбливаешься листать тела каждого метода
Да, конечно есть всякое говно типа интерфейсов (но весь же код ими не обмажешь), диаграммы классов (а это лишние телодвижения), сворачивания блоков (которые еще надо свернуть).. Но это все не то
>>1744548 >>1744568 В том и дело что пишут все на интерфейсах, как и сказали код сворачивается легко, но на самом деле в любой IDE есть навигатор, где все удобнее.
И да, документацию все равно надо писать, хедеры придумали не для документации, такой идиотский дизайн линковки там.
>>1745022 Кресты лучше раста хотя бы тем, что у них более развитая инфраструктура. Это если говорить не о недостатках самих языков как таковых, а о реальной разработке.
>>1745071 Это, имхо, более объективная мера, чем сравнение сомнительных преимуществ самих языков. Каким бы хорошим язык ни был, без либ толку от него мало.
>>1745083 Ну мы же живем в реальном мире. Нет такой физической возможности чтобы появился язык сразу со всем необходимым. Это даже глупо такое предъявлять конечно кроме прокси языков типа тайпскрипт, котлин, с++ совместимого в свое время с сями
>>1745022 Сравниваешь тёплое с мягким Каким бы говном говно ни было внутри самого себя, как язык это всё еще компилируемость + гц + пакет менежер + отличный конкуррент
Сап програмач. Я в го недавно, подскажите пожалуйста как лучше в го валидировать входящие json данные. Я посмотрел пакеты, которые доступны, самый популярный пакет, который я нашел - https://github.com/go-playground/validatorон валидирует структуры , jsonschem'ы как я увидел не пользуются популярностью. В nodejs божественным @hapi/joi пользовался
>>1744692 >Любое IDE позволяет свернуть/развернуть всю реализацию одним сочетанием клавиш. Код смотрится не только в IDE, например код смотрится в браузере на том же гитхабе. Я хочу открыть файл и сразу увидеть интерфейс, а не нажимать кнопочки (которые я не помню)
>>1744692 >Так на интерфейсах всё и пишется Заебешься все обмазывать интерфейсами, особенно там где оно не надо и никакого наследования в принципе быть не может и не должно.
>>1745008 >В том и дело что пишут все на интерфейсах, как и сказали код сворачивается легко, но на самом деле в любой IDE есть навигатор, где все удобнее. это лишние телодвижения.
>>1745008 >хедеры придумали не для документации но юзают их для отделения определение от объявления. Поэтому программисты в сях придумали новый тип файла - .inc - когда определение не получается засунуть в c/cpp(особенно для шаблонов)
>>1747597 append и delete - магические функции, нельзя написать их аналоги средствами самого го, с попами и инсертами наверное решили эту магию дальше не плодить.
>>1747615 И еще вопросик. По ссылке передавая слайс и изменяя его будет примерно так append((list)[:1], (list)[2:]...) Не упрощается? Т.е. пробегал глазами по го туру и вроде было, что (*list) можно на просто list заменить, но ошибка
Аноны, мне нужно создать windows service моего говнокода на golang, поискав, я увидел что все кончают от этой репы: https://github.com/kardianos/service
Но я нихуя не вижу как именно нужно устанавливать go бинарь, через sc.exe?
Зачем нужны функции возвращающие функции? Это все только для того чтобы переменную засейвить между вызовами? Почему просто не сделать статическую переменную?
Поясните за стек технологий, я за пару месяцев освоил гошечку до уровня "переписал всю фласкоалхемопарашу", ноль фреймворков, горутинами жонглирую, ну думаю, всё, я у мамы микропинусный специалист, пошёл смотреть вакансии и охерел, в каждой требуется знать по три сервиса для логов, по три сервиса для мониторинга, по три брокера сообщений, по три носкл-базы, причём в каждой вакансии новый набор, и каждая первая требует десятилетнего синьорства, как вообще в эту область вкатываться?
>>1749113 На самом деле там не требуется по три всего и ты можешь спокойно идти на собеседование. Подобные требования сделаны для отсеивания совсем долбаебов (видимо ты входишь в их число, раз тебя это тормознуло).
Ты скорее всего на работу не устроишься, ибо только знание языка без библиотек - это аутизм. Голэнгу можно научиться за месяц, и еще успеть внутрянку затронуть. Вся суть голэнга в инфраструктуре. Тебе в любом случае нужно знать хоть что-то из этой области. Потыкай rabbitmq и в целом поверхностно узнай как инфраструктура микросервисная строится, что применяется. Попробуй что-то простенькое поднять на 3 с половиной сервиса.
В голэнге обычно ищут людей, у которых есть бэкграунд на других языках. А судя по тому, что тебя удивили очереди и логирование - ты пытаешься вкатиться с нулевой базой и без знаний.
В голэнге намного сложнее джуна брать, ибо его обучать придется год. А, напирмер, пхп или питониста можно за пару месяцев подготовить, соответственно и требования почти нулевые (опять же не нужно смотреть что в резюме требуют тысячу технологий).
Потому что добавь в функцию, возвращающую функцию, два-три параметра и представь себе комбинаторный взрыв если у тебя вместо генератора придется писать функцию на каждую комбинацию этих параметров.
Суп гач. Дочитываю "Язык программирования Го". Встретился на охуенную функцию, которой мне дико не хватает после возможностей питона залезть своими руками в любой класс, даже в "__приватные" поля.
Собственно, хочу узнать, есть ли какие-нибудь удобные подобные инструменты чтобы заниматься "реверс инжинирингом" навроде функции пикрил.
Функция выводит все содержимое любого типа любой вложенности даже приватных полей (пиркил 2).
>>1753401 То, что функцию нельзя вызвать извне, не просто так сделано, наверное? И инкапсуляцию, наверное, не просто так придумали? Вообще, инструмент такой есть. Называется Ctrl-C Ctrl-V .
>>1753600 Не помню, чтобы кто-то говорил про простоту вката в го. Речь обычно идет про простоту самого языка для того, чтобы начать на нем писать что-то внятное - это все еще правда.
>>1753614 Ну через рефлексию в любом случае устанавливать эти значения нельзя, но для понимания общей картины, контекста происходящего, особенно если код не библиотечный, почему бы и не посмотреть. Как минимум дебаггер такую возможность предоставляет.
Просто думал может есть какие-нибудь удобные готовые инструменты.
можешь на ютубе глянуть gopher school - там чел пишет простую веб-прилу. я с некоторыми вещами не очень согласен (например, работа с бд), но объясняется там неплохо + чел сразу тесты пишет
>>1755234 Какие веб-приложения могут быть? Рестик, докфайл и в продакшон >>1755342 >некоторыми вещами не очень согласен (например, работа с бд), Работает следовательно правильно!
>>1749529 elixir те ещё аутисты. никто за него крупная компания не стоит, соответственно пустая трата времени. ты либо тролишь или отсеиваешь конкурентов.
>>1743955 (OP) Сап, ребята. Помогите определиться плиз. Я сейчас пишу на питоне веб приложения типичные, стек django. Есть вариант вкатиться в fastapi/sqlalchemy и т.п., либо вкатиться в го. Как думаете, лучше потратить сейчас время на полное изучение одного языка с его либами, всей, так скажем, "экосистемой", или сейчас параллельно учить го? Потому что складывается ощущение, что писать бэк на питоне несерьезно что-ли...
>>1760890 Я тебе так скажу. Тебе нужно определится по поводу языка. Выбрав другой язык, твои программы не станут лучше, ценного опыта не наберешь, и денег не заработаешь. Коль выбрал питон, и полностью его освоил дойдя до fasapi (ведь так? Или ты просто бэнчмарков наелся и реши что просто так начнешь API на нем клепать ?), означает что можешь работать. Как будет опыт мидла, сможешь трезво оценить ситуацию и если понадобится перейти на другой язык. Так что мой тебе совет, не мотайся от языка к языку, освой достаточно один, а там двигайся в любую сторону.
Здравствуйте любители го. Вопрос такой. Играюсь с горутинами и возникло некоторое недопонимание... Есть функция, отправка Post запроса на сайт (Больше ничего). Если я делаю цикл в мейн функции с запуском 100 горутин, то fmt.Println(runtime.NumGoroutine()) показывает, что горутин многократно больше. Если эту функцию заменить на обычный вывод текста, то все нормально, горутин столько же, сколько запускается. Кто нибудь подскажет почему так? Больше спасибо
>>1766783 Да, есть такой момент. На некоторые сайты горутин столько же сколько ожидается, а если гугл пинговать - многократно больше (И с некоторыми сайтами тоже)
Сап, двач. Как в Golang подключить файл login.txt из папки src к файлу login.go в папке tests? Всё работает отлично, если оба файла находятся в одной папке, но их будет дохуя, и нужно как-то разделить.
Хочу написать программу сталкинга за Инстой ЕОТ 24/7, чтобы разв минуту рефрешилсоь и сохраняло на диск ей офлайн/онлайн статус в тектсовый файл, а так же скачивал новые фото и сториз в минуту их постинга
По туториалу http://www.golang-book.com/guides/machine_setup#windows-finished пытаюсь запустить Тетрис через Git Bash, но он не запускается и вот что пишется: goroutine 1 [running]: main.main() C:/Users/User-1/src/github.com/k0kubun/tetris/tetris.go:124 +0x179
>>1782272 Но ты описываешь свой опыт, который не похож на мою ситуацию. Как можно с недоджуна перекатиться на миддла? Стоит ли тогда сначала на поработать на стэке с большим числом вакансий, чтобы получить хоть какой-то опыт, а потом пойти в голанг? Или сразу учить его и долго ходить собеситься? У меня в основном все айти - это хобби энтузиазм и ковыряние своих "пет проектов" дома, официально работать прогером не приходилось.
>>1782500 >официально работать прогером не приходилось Ну тогда учи го и вкатывайся в стажёры или джуны, вон в вайдбнрис и вроде ламоде берут, в авито, в озоне тоже (но хз насчёт джунов в озоне)
>>1782500 На го нет джунских вак. Бери нормальный устоявшийся язык - жабу или шарпы. 2 года с ними поработай, стань милом и двигай в свое го, если оно к тому времени не скурвится, как в свое время RoR.
Привет, пишу апи на го. Как сделать кастомный тип ID,чтобы без большого труда можно было бы его заменить с int64 на string?
Сделала type ID int64, было бы отличненько, если бы не необходимость сканировать из постгреса массив. А его нужно оборачивать в pq.Array, который не может тип []ID кастануть к []int64.
Ну, функцию pq.Array можно переписать и расширить, но я все равно не особо представляю как []ID приводить к []int64 =(
>>1779074 Вот мой тимфюрер тоже так думает, по этому я, вместо того, чтобы генерить сервер и клиент из OpenApi спецификации - копипащу структуры между 6 микросервисами и обмазываю это болейрплейтом в рукопашную.
>>1785061 Если ты знаешь финальный размер слайса - эфективнее будет сразу алоцировать слайс нужной длины (или вместимости, если удобее через аппенд) https://play.golang.org/p/EuSozdMlme0
>>1785186 Знаю размер слайса, но как-то затупила и не воспользовалась этим =( Спасибо за наводку!
>>1785196 Я писала про []int64, потому что он каститься будет без проблем) А вообще мне не очень нравится идея существования таких оберток для оберток, лично мне гораздо удобнее явно видеть слайс или мапку
>>1794112 У меня есть небольшой опыт PHP, а конкретно кастомизации компонентов под битру и их написание, много верстал, занимался сеошкой, рекламой(очень типичная вакансия в мухосранске). Чекаю инфу на метаните и golangs.org - просто, а самое главное интересно, в отличии от тех же фреймов пыхи(хз почему, но не зашел ларавель). Собственно с соображалкой проблем нет, инфу, опять же, если интересно, усваиваю\понимаю\принимаю лучше других(ориентируюсь на дногруппников). Анон, если не сложно, подскажи конкретнее. Со знаниями курса с метанита и сайта выше, плюс, например, чат-бот для телеги, плюс, например, интеграция каких-либо сервисов с сайтом(для мини-портфолио и в первую очередь собственного знания), каковы шансы устроиться таки в ДС2? Вопрос конечно ебанутый, все индивидуально и тд и тп, к тому же понимаю, что лучше задрочить фреймворк php, но блять не интересны они почему то
>>1806208 Хз ,я из Новосибирска, нескольколет назад штук пять было, получил оффер. Потом решил уволиться и переехать, за месяц собесов (подался штук 10 компаний) получил несколько офферов в Москву и Питер, некоторые даже удалённо. Это не php, конечно, в каждом втором подавале на го не пишут, зато вакансии в большинстве нормальные и рейты не самые плохие.
>>1809541 Завозить нужно будет ещё много чего, кроме дженериков и эксепшенов. - нормальные структуры данных (ring, list, heap - это даже не смешно) - полиморфизм - аннотации - заменить ошибку на варнинг при неиспользуемых импортах или переменных - система пакетов - это вообще пиздец, один прибитый гвоздями Git чего стоит.
>>1809572 >эксепшенов нахуя нужны? >полиморфизм не понимаю, почему полиморфизм выделен в отдельный от дженериков пункт. в языке есть интерфейсы. какой еще полиморфизм нужен? дженерики? либо я просто не понимаю, что такое полиморфизм, объясни, пожалуйста >заменить ошибку на варнинг при неиспользуемых импортах или переменных что плохого в том, что компилятор бьет тебя по рукам за хуевое оформление кода?
>>1809923 > нахуя нужны? Чтобы сократить объём кода на 50%, и его стало легче читать. > полиморфизм Я проебался, имел в виду перегрузку методов, чтобы можно было несколько одноимённых методов с разными сигнатурами. > что плохого в том, что компилятор бьет тебя по рукам за хуевое оформление кода? Если пишешь какой-то тестовый код, где всё время комментишь/раскомменчиваешь строки кода, которые юзают импорты или те переменные, приходится каждый раз прыгать по всему коду и все эти импорты и переменные тоже комментить, либо писать костыли наподобие fmt.Print(""), чтобы компилятор, считающий себя самым умным, перестал выёбываться.
>>1809936 >Чтобы сократить объём кода на 50%, и его стало легче читать. это, конечно, правда, но, имхо, подход с передачей ошибок между слоями приложения более правильный, чем выброс исключения в никуда. например, выбросил ты исключение из доменного слоя, а обрабатывает его кто-то (и вообще, обрабатывает ли?) на уровне хттп-обработчика. понятно, что все зависит от уровня развития макаки, которая работает с твоим кодом и исключением, но гарантий того, что ошибка будет обработана корректно, больше в случае с гошным подходом. + необработанная ошибка в го не приведет к остановке всего приложения, как в случае с необработанным эксепшеном, а это зачастую важно >приходится каждый раз прыгать по всему коду и все эти импорты и переменные тоже комментить а IDE какую юзаешь? goland, например, автоматически убирает импорт, если в файле пакет не используется. думаю, для других редакторов таких плагинов тоже хватает. не думаю, что подобные проблемы следует решать изменениями в языке/компиляторе
>>1809941 > подход с передачей ошибок между слоями приложения более правильный, чем выброс исключения в никуда. например, выбросил ты исключение из доменного слоя, а обрабатывает его кто-то Проброс ошибок тоже ничего не гарантирует. Часто уже на автомате пишут "return nil, err", даже не задумываясь, что это за ошибка, либо понимая, что на этом уровне её не обработать. Почти как checked exceptions в жабе. > на уровне хттп-обработчика > необработанная ошибка в го не приведет к остановке всего приложения, как в случае с необработанным эксепшеном Я такое только в плюсах видел, чтобы эксепшен не ловился где-то на самом верхнем уровне и не обрабатывался, а приложение аварийно завершалось. Обычно везде есть минимальный дефолтный обработчик, который всё оборачивает в 500 Internal server error. > а IDE какую юзаешь? Я не пишу на го всерьёз, поэтому goland не видел. Но без редакторов с автоматическим удалением импортов писать на го очень больно. > не думаю, что подобные проблемы следует решать изменениями в языке/компиляторе Ну а я думаю, что проблемы стиля должны быть именно варнингами, код-то рабочий. И изменение не должно ничего сломать, это ведь разрешение того, что было запрещено, но не изменение поведения.
>>1809941 >необработанная ошибка в го не приведет к остановке всего приложения, как в случае с необработанным эксепшеном, а это зачастую важно ага. только вот если что то идет не так, то в итоге получается не то. и работать потом с невалидным стейтом такое себе.
исключения ругают за неявность, мол хер узнаешь что там прилетит вот только вообще в принципе невозможно знать все возможные ошибки. сегодня код работает с сервисом который с файлами работает, а потом подменяется на тот, что из сети данные берет (а никто сетевые ошибки и не ждет), а то и вообще новую имплементацию подкинули в рантайме, а там деление на ноль - то есть обычный подход, когда логика инкапсулируется и снаружи банальная абстракция и кишки не лезут наружу. То есть может возникнуть то, чего не ожидали независимо от используем ли мы исключения или ошибки (если конечно язык не убогий на уровне синклер бейсика), а значит попытка обработать все возможные ошибки обречена на провал. Мы их а) не знаем б) один хер пропускаем выше ибо не знаем что делать
так в чем разница?
и с исключениями нужно сделать так, чтобы ошибки не проходили границы контекста и наружу полетит ожидаемое исключение а не черт знает что а еще удобно разделять системные исключения и приложения. я хз почему это считается антипаттерном если это люто удобно. - все что пользовательское ловишь и реагируешь. Системные ожидать бесполезно. это в 999999% случаях баг и нужно просто не дать пройти границы контекста и сделать невалидный стейт
>>1809936 >Я проебался, имел в виду перегрузку методов, чтобы можно было несколько одноимённых методов с разными сигнатурами. Говно для даунов. Возвращайся в плюсы и жри там это неявное поведение. Разве нормальному человеку нужно, чтобы метод с одним и тем же именем имел разное поведение, в зависимости от типа аргумента?
>>1810030 >Разве нормальному человеку нужно, чтобы метод с одним и тем же именем имел разное поведение, в зависимости от типа аргумента? нормальному человеку нужно чтобы метод мог в себя принять разное то что у тебя с собой есть, а не заставлять тебя искать "а как привести все к тому виду как ему надо" или гадать "а вот у меня с собой это и как бля называется нужный метод"
про паттерн visitor и деревья вообще можно не вспоминать )
>>1810030 >>1810034 Пардон, что так грубо, но эта фитча скорее не нужна, т.к. большинство людей - идиоты, и скорее всего будут злоупотреблять этой фитчей, и компилятор не сможет проверить, одинаковое ли поведение для, скажем, оверлоада с аргументом стринга, и для оверлада с аргуметом байтслайса. >>1810037 Да, но с овелоадом - все то же самое, только весь этот пиздец еще и называется одним именем
>>1810041 >компилятор не сможет проверить, одинаковое ли поведение для, скажем, оверлоада с аргументом стринга, и для оверлада с аргуметом байтслайса. Ага, ведь в других языках таких сложнейших фич нет.
>>1810165 Я писал, что фитча не нужна, по тому что ей будут злоупотреблять, а не то, что ее нельзя реализовать. Дженериков и интерфейсов всем должно хватить.
>>1810837 В плюсовой, например, реализации - это выглядит как несколько блоков, несколько методов с одним именем, которые могут вообще не иметь общего кода, в отличии от метода с if/switch по параметрам, которые, скорее всего будут иметь общий код до и/или после ветвления.
>>1811939 Продукт нужен быдлу, а людям нужна духовность, которую можно найти в том числе и в программировании, осмотрено в сложных языках наподобие Плюсов.
Я чет нихуя не пойму, почему бинарник на выходе имеет таблицу экспорта, в которой все функции содержатся. Это надо при статической линковке? Или ее можно удалить нах? У меня же не dll файл, через hхd меняю название функций, и все работает, то нах оно нужно в принципе, в ехе файле?
блядь да какого хуя ты не удаляешь названия функций, как в gcc передаешь -strip и все заебись, а тут пизда хуйня ебаная, передаешь -s он чет удаляет, но все до пизды
Хай гайс, есть короче дилемма. Пишу тестовый проект для email подписки на изменение цен вэб объявлений авито. Хочу сделать это отдельным сервисом, внутри которого есть некоторая структура которая хранит данные вида ("ID товара", "Актуальная цена", емайлы подписанных юзеров). И всё не могу понять к какому виду это привезти. Очень хочу юзать map для хранения всего этого.
Сначала пришел к виду map[string][]string , где как ключ хранится сама ссылка на объявление, а значение - список подписанных юзеров. Вопрос, как можно к этой структуре корректно привинтить ещё одно значение цены? Я могу не хранить цену в структуре, но тогда каждый раз мне придётся ходить в БД и доставать её, для сверки на предмет актуальности.
>>1814304 Я крч подумал и решил что лучше хранить это в двух разных мапах. В одной map[string][]string - список подписанных емэйлов, а в другой map[string]string - актуальную цену. Так наверное лучше будет. Можно какой нибудь рэдис использовать для хранения ). Просто если учесть что будет много отслеживаемых товаров и каждый раз для сверки цены приложуха будет ходить в БД - это наверное ужас.
>>1814321 да на самом деле от кол-ва запросов и данных зависит. при низкой нагруженности ты издержек от хождения в БД не ощутишь особо, имхо. а при высокой лучше действительно редис заюзать
Очевидно, что создателей Go не ебёт, что кто-то пытается его юзать как замену C++, а кто-то другой реверсит поделку первого. Go не создавался как убийца крестов, это серверный язык, как всякие жабы и питоны, и на сервере всем похуй, что всё легко декомпилится. Удивляться, что Go не делает то, для чего он и так не предназначен, как минимум странно. Да, убийцы C++ действительно не хватает. Но это ещё не повод брать Go.
>Но это ещё не повод брать Go. а что тогда брать? Компилируемое, не borland В го много чего доступно из коробки, чем подкупает, и компилируется в натив, ну и сборка мусора как доп. фишка. Где еще такое есть?
>>1814513 слышал, что на расте еще больше бинарник весит, чем на го, это так?
>>1814540 > на сервере не надо ничего защищать? Надо, доступ к самому серверу. А если доступ защищён, то на самом сервере пускай хоть вообще всё открытым текстом лежит, юзеры всё равно не могут это прочитать.
> а что тогда брать? Не знаю, но точно не Go. Я тут пытался заставить Go работать с dll-ками и с либами без исходников, там всё очень плохо, причём это не недоработка, а принципиальная идеология языка. У раста, говорят, инфраструктура хреновая, но с другими компилируемыми в нейтив языками всё намного хуже. Да и вдруг у раста тоже нельзя сделать strip.
>>1814540 >на сервере не надо ничего защищать? Надо, но удалением отладочной информации ты ничего не защитишь, а только усложнишь исправления проблем. >слышал, что на расте еще больше бинарник весит, чем на го, это так? Они там жирные, но не настолько, на сколько в го. Если критичен вес - используй strip
>>1814513 >>1814551 Но ведь раст разве что Мозилу убить сможет. Он ещё не готов к продакшену, гора зависимостей в альфа/бета версиях, все либы тухлые, документация пилится энтузиастами, дебагера нет, многие фичи языка пердольные - та же асинхронность. Ну и скорость не впечатляет по сравнению с Zig или хотя бы V. Волна популярности раста прошла и после неё оказалось что лишь единицы пердоликов готовы кодить на этом говне. А свежие проекты, где важна производительность, всё так же пишут на си/крестах + асм-вставки.
>>1814561 > Я тут пытался заставить Go работать с dll-ками и с либами без исходников, там всё очень плохо Что у тебя плохо там? В Go встроена сишка и полная совместимость со всеми сишными либами, просто инклюдишь хэдеры и указываешь компилятору где либы брать. С крестами естественно не будет работать, нужен С-интерфейс в либе.
>>1814776 >Ну и скорость не впечатляет по сравнению с Zig или хотя бы V Ты серьезно zig или v рассматриваешь? Это вообще ноунеймы, нет смысла даже думать о них. V вообще какое-то васянское поделие, кривой копипаст го. Но про скорость интересно, есть пруфы? >Волна популярности раста прошла и после неё оказалось что лишь единицы пердоликов готовы кодить на этом говне. Это уже толсто. Пруфов не будет, я уверен. >А свежие проекты, где важна производительность, всё так же пишут на си/крестах + асм-вставки. Чаще всего да, но есть и на расте свежие проекты.
>>1815637 > Их отсутствие в го - достоинство А я всё думал, почему котлин у меня так сильно ассоциируется с goвном. А всё из-за уебанского отношения к кодерам вместо того, чтобы дать им выбор. В котлин-треде тоже недавно писали, что какой-то там тип специально сделан ущербным, чтобы его не юзали. Пиздец.
>>1815637 Да зачем вам эти дженерики вообще? За все время моего программирования на го, дженерики были нужны только для каких-то небольших util функций, которые несложно и скопировать в случае чего. >>1809387 >> думает, что кодогенерация появилась от хорошей жизни Кодогенерация появилась не для замены дженериков
>>1815725 >А всё из-за уебанского отношения к кодерам
Всё верно, кодер должен быть легкозаменяемым винтиком, а не незаменимым пересидельцем уровня сеньера-застольного кореша гендира с охуевшими требованиями по повышению зарплаты.
Поэтому все кодерки должны думать одинаково - их нужно дрессировать быть рабами чтоб бы они при этом со счастьем на лице обмазывали ебло малафьей и самостоятельно траллили тех своих коллег, кто рабами быть не хочет и обзывали быдлокодерами, показывали пальцем и смеялись, в перерывах в курилках обсуждая новые модные кандалы.
Чего блядь, в каких курилках, какие назхуй переывы, никаких перерывов, только спецально одобренная корпоративная ржомба в специальных корпоративных чатиках в телеге.
>>1815728 Я и говорю, не нужны >>1815707 Генератор может быть вызван из консоли, описание для него написано в твоём любимом редакторе >>1815725 Язык должен был простым в смысле количества сущностей и правил для них. Иначе получится С++ и никто не захочет его использовать.
>>1816897 За что убивать? За написание cli tools на го? Да ты же поехавший, на го как раз особенно часто их пишут, и не удивительно, он для этой цели отлично подходит.
>>1817034 У меня просто жопные боли были, когда наш девопс настроил деплой через бинарники на го и на каждый пук необходимо к нему было обращаться, так как исходники он не давал
>>1816897 намного лучше более популярных альтернатив вроде петона - закинул себе в патх и пользуешься, не ебешь мозги никакими плагинами. лучше только посикс или баш с корутилзами.
>>1815376 > Но про скорость интересно, есть пруфы? Естественно. На TechEmpower либа jsonа быстрее на v, чем на сишке. Zig вообще в любых бенчах рвёт сишку, посмотри у них на сайте, но пока на нем ничего не пишут серьезного из-за breaking changes, которые в один список не влезают. > Это уже толсто. Пруфов не будет, я уверен. Последний год звёзды быстрее v набирает, чем раст. Куча либ на расте были на хайпе в 2018 написаны и до сих пор тухнут. Сам язык замер без изменений, а фиксить там ещё много чего.
>>1817967 Про либу jsona на techempower: У раста may-minihttp 1,593,722 У V pico.v 1,617,611 Разница очень маленькая, а ты говоришь раст по сравнению с V не впечатляет
Го это писька, чтобы за 5 минут написал серверную залупу, которая работает быстро из коробки, без ебли и оптимизаций, с маленьким бюджетом.
Зачем вообще сранивать с монстрами, типо явы, где пилятся гиганские бабки, с гигансткими командами, с гигансткими бюджеты, с гигансткими сроками.
Если ты начинаешь молодой стартап с небольшим бюджетом, или MVP, то гошечка после идеальна. Начненать на яве или С++, это уже автоматом выстрелить в ногу.
>Зачем вообще сранивать с монстрами, типо явы, где пилятся гиганские бабки, с гигансткими командами, с гигансткими бюджеты, с гигансткими сроками.
Потому что все собравшиеся на этой доске здесь именно ради этого. И любой выстреливший проект придется всё равно переписывать в говно-кроваввый интырпрайз
> пилятся гиганские бабки
И именно по этой причине даже под дохлый и никомку в 2K2D не нужный бекенд на ноде есть куча маняорм-фрейморков и прочих тру-энтерпрайз клонов Spring вроде NestJS.
>>1818642 > Зачем вообще сранивать с монстрами, типо явы Сравнивают потому что на го можно быстрее и эффективнее делать то, что можно через боль и страдания делать на жяве
Как с таким говном еще кто-то считает питон стильным модным молодежным классным языком? Это же какая-то процедурная параша уровня как раз вышеупомянутых цмс на пхп
Питон идеален, когда надо по-быстрому наклепать мелкотулзу, скрипт для автоматизации чего-либо или модель какой-нибудь простой нейросетки. Но ведь, сука, пишут огромные проекты, которые на каждое второе действие стектрейсят и стектрейсят, что тип неправильный, или какого-то метода нет. И не надо про юнит-тесты - это костыль, чтобы компенсировать отсутствие статической типизации.
>>1821577 У нас на работе обязателен type hinting через mypy и проверку кода на стиль и синтаксические ошибки через black перед коммитом. На пике рач у которого breaking changes вообще норма
Кто-то юзает goconvey или ginkgo для бдд тестов? У меня в проекте овер9000 тестиков, мне вот интересно, как мне уменьшить дублирование кода в них. В тех же ПХП, на котором в компании есть легаси код, я заметил люди пишут бдд тесты просто текстом. типа, "Given user" = func() { user := User{} } Given User When bla bla Then this one
Хотелось бы так же, чтобы я описал тесты в виде текста, а условия были маленькими функциями
>>1821592 ты серьезно? тут не просто новости рача или петона читать нужно, тут нужно сканировать код для всего петоноговна, которое у тебя установлено, чтобы узнать, ломает ли новый кейворд петона какой-то пакет. делать это вручную или как ты написал "читать" это брейнлет-тир, эту задачу должен решать не пользователь.
>>1822263 Очень тупо: package main // # include <stdio.h> // прочий сишный код import "C" func main() { C.puts("Hello, world!") }
И тупо скомпилировать как обычный исходник на Go. Имей в виду, что сборщик мусора Go не будет за тебя вызывать free() в сишном коде, тебе придётся это делать самому, иначе утечка памяти.
>>1822212 >тут не просто новости рача или петона читать нужно, тут нужно сканировать код для всего петоноговна, которое у тебя установлено, чтобы узнать, ломает ли новый кейворд петона какой-то пакет. делать это вручную или как ты написал "читать" это брейнлет-тир, эту задачу должен решать не пользователь.
>>1744568 >диаграммы классов (а это лишние телодвижения), сворачивания блоков (которые еще надо свернуть).. Но это все не то лишние телодвижения это переключаться между файликами и править сигнатуры в двух местах. за компуктер не нужно делать работу, которую он может делать сам. вручную дублировать код для компуктера это вообще бловс май майнд
>>1745612 >Поэтому программисты в сях придумали новый тип файла - .inc - когда определение не получается засунуть в c/cpp(особенно для шаблонов) Стокгольмский синдром по-крестоблядски: ебаная в жопу крестоблядь после всего времени насилования своего мозгообразного органа крестами просто не может осознать, что можно и не выносить декларации в отдельный файл, она даже когда крестокомпилятор запрещает ей это, все равно обходные пути так делать - и, сука, находит.
Аноны, кто использовал rabbitmq в связке с protobuf? Есть одна проблема. Сериализую сообщения, отправляю о очередь. На другом конце принимаю и пытаюсь десериализовать, но получается десериализовать почему-то не все. Не понимаю, как это возможно. Кто может глянуть: https://github.com/hageshtrem/go-rabbitmq-protobuf-issue
Вопрос общий, но поскольку я пиша на Го, задам его тут. Аноны, как научиться в абстракции? Пишу уже 7 год, но до сих пор хуёво с этим. Понятно, что все эти годы я говнокодил по большому счёту, но в моём коде хотя бы можно было разобраться, он линеен. Не так давно осознал, зачем вообще делать интерфейсы, лел. Раньше думал раз тестов пока нет, мокать нечего, ну и нахуй они нужны, если реализация всё равно одна? Вот сейчас пришёл на новую работу, так тут понаписано пиздец, хуй что где разберёшь. Какие-то финализаторы, фасады, ресурс контейнеры, охуеть вообще. Вообще легально так писать на Го? Попахивает тырпрайз жава парашей. Нужно как минимум понять, что и зачем здесь так написано. Я смотрю на всё это и не понимаю, как блядь человек в состоянии это всё написать? Это врождённый навык или можно начитаться книжек по паттернам и писать так же? Советуйте в общем, что делать.
>>1825695 Первое время тебе этот код будет казаться сложным, потом привыкнешь и будешь восхвалять тех, кто это написал до тебя. По моему мнению, если изначально думать о тестировании кода, то абстракции будут пониматься отлично. Потому что легкое тестирование = легкая заменяемость в коде. Да и ты же не хочешь в своём коде тестировать имплементацию библиотек сторонних (для этого у них есть свои тесты)
>>1825695 >Вообще легально так писать на Го? Попахивает тырпрайз жава парашей. Так го тоже предназначен для тырпрайза. Посмотри исходники k8s, например.
>>1825699 >>1825701 Ок, а есть какой-то разбор типовых ситуаций, для которых мне нужно воспользоваться определённой абстракцией? Где про это читать? Все книги, которые я листал по паттернам, имеют очень синтетические примеры.
>>1825707 ну если читать книги типа банды четырёх - то там вроде нормальные примеры. А вообще я обычно руководствуюсь тем, что мне нужно покрыть полностью код тестами и если не получается - значит что-то делаю не так. У меня нет такого типа, о тут надо фасад сделать или ещё что-то - оно просто в голове уже лежит как сделать лучше и всё.
>>1825695 >Нужно как минимум понять, что и зачем здесь так написано жависты наверное переучивались. они ебанутые, не смотри на них. >Это врождённый навык или можно начитаться книжек по паттернам и писать так же? мне кажется обычно это врожденное, но иногда люди такими становятся из-за каких-то событий в жизни
Приветствую всех гоферов в этом треде. Около года назад начал свой вкат в погромирование, изначально выбрал фронт т.к в него влегче вктатиться (что и сделал за 3-4 месяца - на реакт/редакс макаку), но во время вката понял что именно пограмирование мне более интересно (когда задрачивал js на кодварсе), нежели верстка/дизайн и всё что около фронта. Выбирая что освоить для бэка решил не идти по протоптанному пути ноды/ts, а освоить другой ЯП, дабы взглянуть на мир шире. В настоящий момент имею опыт работы фронтом 8 месяцев (Реакт/редакс), плюс 2-3 месяца дроча гошки (из пет-проектов есть примитивный rest-api плюс cli, которая конкурентно дергает апишку и выводит текущую стоимость криптовалют, сохраняет историю их цены в csv). В теории понимаю БД и докер (что и зачем нужно, какие виды бд есть, их типовые сферы применения, зачем нужны индексы, что такое шардинг), подтянул часть с сетями (tcp/ip стэк, udp/tcp, отличия версий http, могу на пальцах объяснить что происходит после ввода адреса сайта). С линуксом знаком (4 года manjaro/fedora на десктопе). Хотел бы узнать насчет типовых тестовых заданий на гофера в компании ДС-а дабы задрочить эти типовые проекты и выложить их для портфолию (а-ля мувисерчер на фронтендера). Список теоретических вопросов по го из прошлого треда видел, и могу на них ответить, но практики с БД/докером нет вовсе, плюс сейчас дрочусь с литкодом для практики алгоритмов/структур данных. Также хотелось бы получить советы тех, кто прошел схожий путь из фронтов в бэки (на чем лучше сосредоточить внимание, до какого уровня дрочить литкод, насколько глубоко копать в БД и их оптимизацию и докер и тд.)
>>1830537 Сделай на го интернет-магазин с админкой для добавления новых товаров и личным кабинетом юзера с корзиной, засунь в докер. Все сразу поймешь. Но это тупо для крудознаний, надо еще разобраться с кафкой и/или рэббитом и тоже их куда-то воткнуть
>>1830537 > Также хотелось бы получить советы тех, кто прошел схожий путь из фронтов в бэки (на чем лучше сосредоточить внимание, до какого уровня дрочить литкод, насколько глубоко копать в БД и их оптимизацию и докер и тд.) Пару лет работал фронтеденром, одновременно бекенды на ноде делал на фрилансе время от времени. Фронт надоел. Я менял место работы каждый год, и в разгар короны нашел компанию где нужен был фуллстек со знанием фронта, ноды, и го. На го всякие SSR сервисы, почти всё остальное на го, на нём и пишу в основном теперь. На литкоде никогда не сидел, в бд и их оптимизацию слишком глубоко не копал. Докер нормально копал ещё когда фронтом был. Теорию мало изучал, просто писал много кода, так и научился. На го микросервисы шлёпать много ума не надо, мне даже теперь фронт сложнее кажется, поэтому проиграл с того, что ты противопоставил фронт и программирование. Охуенное на го программирование, байтики гоняешь туда-сюда, жисончики, протобафчики, читаешь это говно из консумера реббита или кафки и обратно.
>>1831340 Шляпа, конечно. Используй protobuf, из него генерируй и swagger для фронтов, и они себе код заебашут на нём тоже на изи. Ещё в сторону gRPC посмотри, совсем от счастья задохнёшься.
>>1831340 Мы наоборот генерировали сварггер из го кода. В итоге меня заебало как он иногда хуйню делал и сделали вручную. Насчёт протобафа звучит как план, но это не апи доки всё равно.
>>1831340 В последнее время такой тренд, что всё пишется в протобафе, сервисы общаются по grpc, а для фронтенда поднимается grpc gateway который автоматически маппит json->protobuf. Он же и генерирует сваггер из твоих прото файлов.
>>1831364 Или они долбоёбы или ты делал что-то не то. Апи без схемы - это пиздец.
>>1831752 > Или они долбоёбы или ты делал что-то не то. Апи без схемы - это пиздец. Спецификацию мы то генерим, просто в микросервисах, которые используют АПИ первого мы руками пишем к нему клиент, вместо того, чтобы генерить из спецификации.
>>1832437 Ну то есть долбоёбы. Генерация клиента по схеме позволяет автоматически исключить человеческий фактор, поскольку в случае, если у тебя везде используется апи-метод ->foo, а в новой схеме его убрали, то после перегенерации клиента у тебя IDE сразу же покажет ошибку. То же самое с новыми полями, ошибками типов (когда вы массив вместо числа будете посылать) и всё такое прочее. Вы просто взяли и просрали гарантии, которые даёт вам схема. Я конечно знал, что jsеры долбоёбы, но чтоб настолько..
Ананасы, подскажите, можно ли как то игнорировать паники? На пике конкретный юзкейс: в горутине в цикле скачиваются треды, и время от времени сосач отдает хуйню вместо html, уж хз с чем это связано. Соответственно распарсить не получается, и html.Render падает с sigsegv, и тянет за собой всё. Пока решаю автоматическим перезапуском докер контейнера, но это костыли. Хочу хотя бы чтоб падала только горутина, а в идеале только конкретный элемент цикла, что то типа try - catch в жабе. Как можно это реализовать, и можно ли вообще?
>>1837285 Ну так заместо выкидывания паники, обрабатывай прям там - например, можешь добавить в логи ошибку эту. В го не принято при проверке ошибки кидать паники. Ещё конечно вариант ловить панику с помощью recover. Но рековер должен быть объявлен внутри горутины, иначе положишь всю программу.
>>1837449 Вощем хз, с обработкой ошибки падает точно так же, а как пользоваться recovery в моем случае я так и не врубился, если все обернуть в defer то просто ничего не запускается, код тупо не выполняется.
>>1837592 Во-первых, ты зачем пустую строку вместе ошибки err выбрасываешь? Во-вторых, ты сам понимаешь как должна обрабатываться ошибка? Её игнорирование это тоже обработка. Что за хуету я вижу на втором скрине? Почитай офиц курс про паники/рекавери и дефер. По-моему ты прогал на каком-то говне (питоне) и теперь идёшь к нам говнокодить?
>>1837618 Пустую строку выкидываю потому что если распарсить не получилось то смысл мне дальше пытаться что то делать? Идет возврат, а там как раз проверка на пустую строку. Игнорирование ошибки или нет, разницы не имеет если все падает с паникой. А на втором скрине ты видешь хуиту как раз из офф курса. Но нахуя для рекавери нужен defer я так и не врубился.
>>1837728 Да везде берут, просто вакансий по сравнению с жавой не так много, поэтому для новичка выгоднее брать тот язык, который даёт больше возможностей для трудоустройства.
>>1837833 Это другой вопрос, понятно, что навыки жависта не на 100% маппятся в навыки гошника. А ещё на свете есть целая куча (на глаз процентов 90%) долбоёбов которые пишут такую херню, что волосы встают в жилах, не важно, джависты они или нет. Просто делай нормально и нормально будет.
>>1837672 Если у тебя функция должна выйти досрочно при ошибке, то правильно возвращать nil. Насчёт defer это добавление выражения в стек вызовов. То есть объявив это в функции А, как только функция А завершится, вызовется твой defer. То есть ты бы мог например defer с recover, а в самой функции код с паникой, но в го на этом поведении обработка исключений/ошибок не строится. Нужно лишь, чтобы предотвращать падение программы. В твоем случае дефер нихуя не работает, потому что само тело функции внутри дефера.
>>1838429 Да как везде, сделай свой пет-проект и приходи с ним. Говори "да, у меня меньше опыта, зато я не долбоёб, я подготовился и всё изучил, у меня есть пет проект и дохуя мотивации". Если реально хорошо пройдёшь собес - возьмут.
1) в main объявили и инициализировали переменную х со значением 5 (x:=5 т.к. тип не указывался, go присваивает тип автоматически и в данном случае это int) 2) в функцию zero передали адрес в котором хранится значение переменной x ( &x будет равен 0x765....09 ) 3) функция zero принимает один аргумент и указание звёздочки у типа int означает что в функцию передается именно адрес переменной и именно с типом int? Т.к. просто по адресу переменной не понятно какой у неё тип. 4) звездочка xPtr = 0 означает что переменной значение которой находиться по адресу Xptr присвоили значение 0
подскажите плиз всё ли правильно? особенно пункт номер три интересует. я ньюфаг еси чо, не злитесь сильно.
Я тут решил для общего развития поучить этот ваш го, сам пишу на похапе. Открыл между делом реализацию метода из стандартной либы, и чет немного удивился подходу к именованию переменных и комментариям. Почти везде переменные называются одной буквой.
Компилятор делает екзешник с таблицей экпорта, где все функции видны, и имена переменных, что вообще очень легко реверсится и ломается кракерами. Может кто подскажет хороший обфускатор, и протектор, чтобы он как минимум - удалял таблицу экспорта (или переименовывал в функции а1,а2,а3... и тд.), глобальные переменные, и вообще усложнял реверсинг бинарника, скомпилированного стандартным компилятором го?
Есть пара каталогов cat1 |->proga1.go cat2 |->proga2.go Можно как-то подключить пространство имён proga1 в proga2? я пытаюсь импортить типа "./proga1", но он что-то меня шлёт нахун. При этом я могу допустим на гитхаб залить, указать путь github.com/name/project/proga1 и он заимпортит, или в gopath залить проект, но не юзая эти методы можно как-то импортировать модули в таком виде?
>>1843389 Обычно используют конструкторы запросов вида squirrel для подобных вещей. Но по-моему, кстати, далеко не все инструменты (и даже тот же squirrel) поддерживают именно вставку нескольких строк за раз, благо, нечастая операция.
>>1846557 Ну хз, мне кажется, истина где-то посередине должна быть. Котлин? Го2? Zig? Rust? Я хз, но у го тоже есть свои косяки и минимализм и ебанутые разработчики часто приводит к тому, что код представляет из себя лапшу из кучи вызовов системных и бизнес-функций, обработки ошибок, каналов и всего прочего, смотреть больно. Не говоря уже про то, на какие хаки в го приходится идти, чтобы обеспечить надежность (тм). Например, те же енумы.
>>1847027 Ну так и есть. Го не замена джаве ни разу. Но джаве местами нахуй не нужно тащить за собой даже спринг бут с нетти. Тут легковесность го с его главными фичами с горутинами и каналами и самой главной фичей if err != nil {} заходит хорошо. Опять же, к примеру, реализация стека IoT железок (OPC-UA) на го есть в виде жалкого поделия студентоты, на Java же полная реализация и поддержка. И таких примеров конечно дохуя. Котлин кроме андройда вообще нахуй не нужен. Там та же ебанина кококорутины и структы. Ради этого всю джаву не обязательно тащить.
>>1847140 В принципе го и котлин довольно популярные у джавистов, по крайней мере на последних 2х местах работы. Как, кстати и JS-ники и в частности нодеры лютые ненавистники энтерпрайза, вполне себе на Go и на Ко, смотрели норм и сами вызывались часть сервисов написать на них.
>>1847131 > Котлин кроме андройда вообще нахуй не нужен. Это ты зря, котлин - это не только корутины (да нахуй их на самом деле), это ещё и тонна удобного синтаксического сахара, решающего кучу проблем джавы без лишней боли, ту же нуллабилити, при этом без лишнего оверхеда (там логично прозрачный интероп, хотя вроде и с совсем небольшим оверхедом для гц). Учитывая, что можно писать на котлине и на джаве одновременно в одном проекте - я не вижу причин его не использовать. Смотри на это, как на java 20+. Шарпы сильно ушли вперед по фичам, а джава стагнировала - поэтому вместо оракла пришёл jetbrains и навернул поверх старой джаву свою новую, совместимую и содержащую все современные фичаи.
Перепост из общего треда: Сижу на Энтерпрайзе-джаве, миддл. Собрал несколько офферов, по сути все кроме одного практически одинаковые по деньгам и условиям - джава, ~150к денег. Но есть один на го, причём го я практически не знаю, контора крупная, поэтому берут с рынка разрабов с других языков и учат на го. Как думаете, перекатываться? По деньгам просадка не сильная, процентов на 10 меньше остальных офферов. Особенно интересно мнение, если вы успели на джаве поработать в энтерпрайзе, но и просто гошников хочу послушать
>>1847196 Хз, мне кажется, что джава пока что перспективнее из-за того, что вакансий больше и работу если что найти легче. А го, хоть и простой, до сеньора ты пару лет всё равно будешь расти, потому что специфика планировщика, гц, экосистема и прочее быстро в голову не ложатся. Поэтому лично я бы тебе порекомендовал сначала досеньорится на джаве до 300к/сек хотя бы, а уже потом брать второй язык, просто как инструмент для каких-то конкретных задач. Тот же го для узких мест, js для фронтенда и так далее. Иначе есть риск остаться вечным миддлом, знающим много инструментов, но ни один не на 100% и из-за этого упереться в миддловый потолок а часики то тикают
>>1847196 Я бы не перекатывался с просадкой. Я сам вкатился на го с джавы с маленьким почти символическим повышением(+20к). Меня просто схантили бывшие коллеги.
>>1847390 7 лет джавы, год на го сейчас. Алсо я почти 8 месяцев на прошлом месте работы допиливал проекты за такую же ставку за час, как на го здесь. Потом как пошли премии за го проекты. Отказался от старой работы. Из-за ебанутых хотелок и самодурства продактов. В общем-то я поэтому и свалил.
>>1847161 Ну да, да. Я написал 1 сервис на котлине с джавой. Согласен, что это нормальное развитие. Это не скала блять. Но мне не зашло, в то же время го удачно зашел. Кстати как раз джава сервис в разработке сейчас, ебану-ка я котлин
>>1847390 да нет, я сейчас собесы прохожу - насобирал офферов на около 150к, по сравнению с моей нынешней это х2, так что даже если я оффер на го возьму - улечу на х2 от текущих
>>1850390 Сначала проходишь go tour на оф сайте (либо локально, если удобнее), затем https://stepik.org/course/54403/, парралельно пытайся написать какую-нибуть прогру с паралельностью, например - web crawler.
подскажите, пожалуйста, можно ли так делать: у меня есть структура Processor, у которой есть набор методов (см скрин)
ProcessNews() - это воркер, который слушает канал Processor.tasks и что-то делает с тасками из него (при старте приложения запускаются N таких воркеров). Process() вызывает приватный метод processWebsites(), в котором достаются записи из бд и по определенной логике закидываются в канал Processor.tasks. У меня есть сомнения насчет того, можно ли закрывать этот канал внутри метода Process(), так как этот метод не является непосредственным писателем, а лишь вызывает писателя. Однако в этой реализации (поправьте, если я не прав) не может произойти такого, что processWebsites() будет писать в закрытый канал => паник быть не должно (только в том случае, если я буду вызывать processWebsites() еще раз отдельно от Process()) Имеет ли место быть такое решение или следует зарефакторить этот момент?
>>1852649 >метод не является непосредственным писателем Это не важно, важно что эта горутина являеться писателем в этот канал, и никто больше. А насчет зарефакторить - лучше сразу выкинуть канал пустых структур в пользу контекста.
>>1852956 Ну, для начала - sync.Once нужен скорее для ленивой инициализации какой-нибуть херни, зачастую довольно дорогой. Например, если ты создаешь какой-то дополнительный конфиг, до которого исполнение может и не дойти, и парсишь конфиг-файл не сразу же, а только когда внешнему коду нужно будет одно из полей конфига. sync.Once гарантирует, что коллбек будет вызван всего один раз, и в этом случае он точно не подходит. > А имеет смысл гарантировать то, что только одна горутина будет писать в этот канал? Зависит от твоей логики, возможно тебе нужна только одна пишущая и одна читающая горутина, а возможно - несколько. Тут важно помнить, что канал - это не ресурс, который обязательно нужно закрыть. Если тебе нужен механизм для graceful shutdown - используй контекст. А мьютексом защищать запись в канал точно не стоит, т.к. аналогичный механизм уже зашит в структуру канала.
>>1852649 >>1852956 Чтобы обеспечить запись или чтение в канал только одному или определённому числу воркеров одновременно, советую использовать семафоры. Вот как пример мой говнокод https://goplay.space/#c5DRpaV1vSf Вместо канала stop, советую юзать контекст.
>>1853194 Да семафоры - это все здорово, но в данном случае мне нужно ограничить не одновременное число воркеров, а в целом число горутин, которые будут писать в канал. Семафор в этом случае мне мало полезен, т.к речь идет про горутину, которая пишет в канал и закрывает его
А как работать с ошибками? С одной стороны, линтер требует, чтобы я не создавал ошибки, а использовал статические. С другой, хочется пробрасывать наверх какой-то контекст ошибки. Третья проблема, что текст ошибок попадает на самый верх и хочется их локализовать. Советы/ссылки?
>>1853897 У нас есть свой тип ошибки, с конструктором Wrap, который включает текст предыдущей ошибки и какой-то текст. В итоге наверху получается ошибка вида "отъебнула запись: ошибка доступа к бд: сломана сеть"
>>1858082 Но зачем ты продолжаешь на нём писать? Ладно есть странные челики которым го нравится, типа этого >>1857553 , но если есть понимание что технология - отстой, зачем продолжать её пользоваться?
Сап, анончики, к вам пришел hyяr. Короче, предлагаю вакансию на гошника-мидла в достаточно крупную компанию в Москве :D Если есть интерес пообщаться, ну и вообще поговорить с хлебом, ищущим людей на дваче, пишите на email zhuchkovatmk@gmail.com, там подробнее расскажу о компании, все такое. Спасибо, если прочитали :3
>>1857656 а мне нравится. прочитал название и сразу видимость понятна. я тут переписывал сишарт и заебался отдельно на кейворды смотреть перед функцией.
>>1867196 Кого оно там что умеет? Линтеробандлер на который нужно вручную наваливать хуки билда с тестами, всё равно имея шанс отваливания при цеплянии нового файла, охуеть просто Поставил стандартный чейн линтер-статикчек-пачкачекеровизкоропки, за мгновение подсвечивает вообще всё, что только можно
1. Что интересного есть в плане работы на Го? Понятно что язык максимум уёбищный, но, может, у вас какие-то интересны задачи/предметные области есть? Или как и все колбасите обосраные CRUD'ы, только на говноязыке?
2. IDEA пользуетесь? Как она в плане глючности/тормознутости для Го?
>>1867269 > Что интересного есть в плане работы на Го? Девопс, операторы к куберу, хайлоад бекенд, WS сервера > IDEA пользуетесь? Больше половины гоферов сидят на golandе, остальные на go pls + вим/вскод/атом/етц. Первый вариант такой же по глючности как и остальные жетбейн иде, почти с таким же функционалом
>>1867274 > такой же по глючности как и остальные жетбейн иде Они таки отличаются. Для джавы работает вообще чотко, дерзко, быстро. А скала плагин глючит так, что мне иногда кажется будто они его специально портят чтобы скалисты переходили на их котлин
>>1867277 Да нет, просто в плагин скалы не влили и десятой части того бабла, который влили в основной парсер жавы. А ещё есть прямая корреляция между сложностью языка и сложностью написания IDE к нему (посмотри на любую топовую иде для плюсов, кекус).
>>1867269 >Что интересного есть в плане работы на Го? Понятно что язык максимум уёбищный, но, может, у вас какие-то интересны задачи/предметные области есть? Бэкэнд как бэкэнд — из одной базы почитал, в другую посрал, результаты работы в очередь закинул — повторяешь. Разве что всё го-коммьюнити помешано на микросервисах, так что будешь ещё и девопсом зато не будешь месить абстрактные фабрики одиноких фасолин как на джаве в проектах на 15 млн строк бройлерплейта, лол.
>Или как и все колбасите обосраные CRUD'ы, только на говноязыке? Тащемта, я бы не сказал что бэк вообще сильно различается даже между стеками.
>2. IDEA пользуетесь? Кто работает на станционарниках — пользуются, кто любит ноутбуки — нет. Язык убер простой, и ничего кроме простого автокомплита и go to definition не нужно, поэтому хоть в nano можешь код ебашить.
>>1867274 >Девопс, операторы к куберу, Вот-вот, я про то же. >хайлоад бекенд Вот это в 95% хуйня кстати, на го уже даже всякое круд-ориентированное говно вроде црм пишут, это новый пхп. >WS сервера Ого, аж вебсокет сервера? Вот это экзотика. Орнул.
>>1867269 1. Если ты всю жизнь писал круды пересев на го вряд ли что-то поменяется 2. Ну я щас прямо тащусь от флайчекерных хайлайтов. DAшный компелятор конечно чувствуется
>>1867246 Да это проблема вообще любой конторы, где проектов больше одного или один просто уже достаточно большой. Бывают компании и меньше сотни человек, где в одном отделе ахуенно работать в а соседнем тимлид — старый и токсичный пидорас, стек из 80-х и воняет гавной в их части офиса, лул.
В любом случае для такого есть испытательный срок, и уйти можно чуть ли не одним днём если договорится.
Привет В го все так же нет смысла вкатываться, как в первый язык? Не программист и не разработчик, для себя свифт изучал, но облизываюсь на работу коллег погромистов (не го,бэк)
Сейчас работаю в гейропе и надеюсь, что ситуация для вкатывальщиков получше (хуй там)
>>1867447 С другими ориентироваными на веб бэкенд языками и либами, вроде PHP, node.js и питоновской джанги. Плюсы и джаву с двадцатилетним легаси он точно не выбьет из банков и прочего кровавого эетерпрайза, а вот распилить на модные микросервисы какой-нибудь разросшийся монолит относительно молодого стартапа всегда берутся с радостью. Язык простой, с нормальной системой типов, компилируемый в нормальные бинарники который тут же кладется в еще более модные докеры с кубами, шустрый и с крутыми потоками из коробки. Чего еще нужно для языка 21 века? ну кроме дженериков и эксепшенов, азаза Продать такое инвестору или выступить на докладе с кучей хайповых терминов очень легко, поэтому язык на хайпе, зарплаты в топе, и прямо сейчас на нем пишется огромное количество легаси, которое можно будет поддерживать ближайшие 20 лет, гоняя чаи на пенсии сеньором-помидором за 300ксек. Те же озоны сейчас набирают перспективный молодняк в свои онлайн-школы, чтобы выпустить больше рабочих лошадок, другие думаю тоже скоро подтянутся. Надо вкатываться, пока поезд не ушел и спрос на гошника намного выше предложения. Я к слову вкатился этим летом и очень доволен, остальным анонам удачи!
>>1743955 (OP) Анон, около 9 месяцев работаю голенг джуном, в мухосране за 30к, до этого работал эникеем, в конторе сталкивался с задачами связанные с докером, кибаной, графоной, реббитом, кликхаусом, монго, постгресс, ссдб, аэроспайк, карочи крудо дроч, еще периодически правлю баги в юайке реакта(но не особо глубоко лазил под копот). Карочи суть в чем, заебало работать за 30к, я уже здоровый лоб, и это пиздец стыдно за 400баксов батрачить. На какую зп я могу расчитатывать при переезде в ДС, или искать удаленку?
>>1867313 В го есть достаточно строгий стандарт кода и организации проекта, которые могут и стать плюсом, научив вкатывальщика делоть проекты на го, так и минусом, конфликтуя с практиками других языков (на одном го далеко не уедешь, параллельно нужно будет учить как минимум html, css, javascript) С гошными концепциями ещё сложнее: даже имеющие десятки лет опыта программисты гадают, есть ли в го ооп... Если ты до этого не был знаком с основами какого-нибудь процедурного языка и основами какого-нибудь ооп (хотя бы номинального а-ля реализация в скриптовых языках) - с 99% не поймёшь "как", "что" и "к чему было" навелоспидено, с чем сопостоявляется и какие приемущиства противопоставляет другим реализациям, особенно традиционным
>>1867274 >Больше половины гоферов сидят на golandе Двачую. JetBrains практически безальтернативная. vscode - и прочие извращения - это для тех, у кого го сервисы как пет проекты или неважная хуйня.
>>1867474 >С другими ориентироваными на веб бэкенд языками и либами, вроде PHP, node.js и питоновской джанги Да ебать, вы серьезно что-ли? Каким образом гошка может с ними конкурировать? Там архитектура и абстракции, тут алгоритмы и низкоуровневщина.
>>1863115 и питон учил, пока не понял что вак ансий нет. Не хочу в джаву блять, не хочу в пыху, в вузе были C/C++, которые дают на уровне старшей школы нормальной. Неужели реально нужно идти в джаву?
>>1867715 А что не так? Я вот когда вкатывался полтора года назад, тоже думал, что в питон вкатиться просто, а затем, когда реально начал искать вакансии, находил только с требованиями опыта от 2 лет и знанием небес аллаха, или опыт не требовался, но судя по вакансии, ты реально будешь чаще заполнять бумажки и чинить принтеры, чем писать хоть строчку на питоне. Действительно нормальных вакансий для джунов (без всяких "быть выпускником топ-5 вузов", например) было очень мало. Плюнул, вкатился в жабу, подтянув за пару месяцев нужное, сижу в энтерпрайзе, программирую на XML.
>>1867790 Долбоеба пусть тебе жизнь простит. А я тебе скажу, что скорее всего ты никогда не писал на тех языках, а если и писал, то был кодером, в которого тимлид задачи кидал. И кроме как кодить, вряд ли что-то можешь.
>>1867792 Я твой язык не оскорблял это во-первых В отличии от тебя на работе не работаю это во-вторых Какие ты там абстракции не нашёл в го это в-третьих
Как я уже сказал — драматическая разница была бы если бы ты был 1с-ником, а так это будет просто флуктуация и твоё личное восприятие, которое может зависить банально от того, в каком месяце ты искал работу там и там, лол.
>>1868026 Больше вакансии значит больше фирм и выбор условий в виде зарплатой вилки, стека на проекте, условий переезда и отношения к тебе начальству и значит больше шансов найти подходящую тебе компанию
>>1867948 Лолчто, давай-ка зайдём на relocate.me и посмотрим, каких вакансий вообще и для релокации в твою любимую страну больше. Обоссал бы тебя за то, что новичков обманываешь
>>1867884 Чем язык популярнее, тем легче. Плюс, некоторые сферы более склонны к мобильности, чем другие. Субъективно, самый мобильный и распространённый - это веб. Та же удалёнка у мобилок обычно развита слабее, потому что тебе для тестов потребуются разные девайсы и если разработчик в другой стране, то ему сложно будет найти себе 10 разных телефонов для проверки всякой фигни на них. Короч, для релокейта наиболее удачны java, js/ts (особенно фулстеки с нодой), php. C# там где-то рядом, но он более корпоративный и как будто бы менее стартаперский, так что возможностей именно для релокейта поменьше. Конкретно для го релокейт возможен, но будет значительно сложнее, в том числе и из-за того, что го часто идёт вторым языком и поэтому ты будешь должен знать ещё что-то (обычно жаву либо пыху).
>>1868031 Это условия рынка в целом, а не какие-то мифические лучшие "условия для релокейта", которые ты сам себе придумал.
>>1868037 Опять верно по отношению к рынку в целом, но не коррелирует с релокейтом никак.
>>1868088 >Лолчто, давай-ка зайдём на relocate.me и посмотрим Давай, открыл и вбил java и golang — 105 к 16. Потом открыл хх и повторил — 3080 к 376. Отличий между рынками не замечено.
>Обоссал бы тебя за то, что новичков обманываешь ^ тебе пора мыться, воняет.
>в том числе и из-за того, что го часто идёт вторым языком и поэтому ты будешь должен знать ещё что-то А сейчас я тебя уже буду обоссывать за то, что дуришь нюфага: с вот таким набором знаний шансов на релокейт просто нет.
>>1868143 О, поясни плиз, зачем тебе го? Ты же на ноде в шоколаде, неужели гошка прибавляет значительно ценности для релокейта? Да и мне представить сложно, зачем он вторым языком, если только не переписывание.
>>1868143 Идеал это когда ты синьйор-помидор с релевантным опытом в любой более-менее релевантной технологии, и в целом тебе похуй на язык, не испытываешь проблем с пойти и выучить, но зачастую самое важное — это опыта в предметной области.
Из 4-х мест работы я на 2 пришёл не зная основной технологии и изучив её на месте (проходил именно по общим знаниям + опыте в предметной области).
>>1868147 Я не он, но могу рассказать по секрету (пару раз собеседовал сам), что если ты придёшь на любой собес и скажешь что пишешь на одном языке — то сразу просто пиздец как опустишь себя в глазах собеседующих, если ты не джун.
>>1868152 Ну, может и в другом — с джавой и прочим энтерпрайзом не связан никак, может там это и ок. В моём мире вообще везде — и в бэке, и в фронте, и в мобилках — везде такая конъюнктура.
>>1868147 Для релокейта гошка мало ценности прибавляет, вакансий не очень много. Но знание го, как мне кажется, повышает мою ценность на рыночке. Нас жсеров как говна ведь. И мне го просто нравится, в узких местах для перформанса или других профитов можно делать отдельные сервисы на нём. В одном месте, где я работал, у нас был весь бекенд на го, а на ноде был только сервер для рендеринга реакт-приложения. Я сам по себе очень ленивый, для бекенда мне нужен был второй дополнительный язык посерьёзнее. Джаву и сишарп было лень учить, они казались какими-то раздутыми и перегруженными, хотя полсе тайпскрипта мне дотнет думаю хорошо подошёл бы. В итоге взял гошку и не пожалел.
>>1868148 Согласен, но вот я часто испытываю некоторые проблемы с пойти и выучить. Работать хочется как можно меньше. В свободное время мог что-то учить только когда зелёным джуном, а за счёт работодателя иногда может быть и можно.
>>1867484 Ну, на самом деле vscode + gopls покрывают 95% юзкейсов - рефакторинг, го-ту-дефинишин, автокомплит они умеют. Все остальное я в повседневной работе практически не использую, по этому вполне могу работать и вскода, который, к тому же, на много легче для железа.
>>1869232 Ну тебе ответили Весь скриптовый зоопарк Python Ruby JS PHP Проперженный тырпрайз JVM C# Если скорее технически - какой-нибудь эликсир
Ты можешь взять и написать любой сервис с типами, идиом ооп, латенси-гц перформансом и мультитредом, поддерживаемым комунитей код стилем, тонной изкоропочных либ на все случаи жизни и в среднем это всё будет собираться в ~30мб бинарник из которых 10 рантайм
>>1869277 Сейчас буквально каждый язык позиционирует себя как генерал пурпос, из которого можно слепить что угодно Го тоже, но со своими тех характеристиками значительно выделяется на фоне остальных >>1869279 два труъ ооп языка vs оопшное имплисит лего житовские вм и сги vs натив конкуррент танцы с бубном vs гугловский эвент луп и зеленые потоки отдельный штат девопсов vs 5 строчек на мультистейж докере пердолинг пакет менежера vs импорт ссылки на гитхаб прямо к код )
Вроде бы другое против другого, но практике, чисто практически, из можно слепить что угодно, ебя мозг в разы меньше, еще и получить гору плюшек с тех. составляющей части
>>1869015 >Эта хуйня даже умеет сама ресолвить и вставлять импорты Ебанумба Так это и го туллинг умеет, вроде go fmt тоже это делает. Другой вопрос в том, что руками его запускать может задалбывать, на много удобнее когда тебе это ИДЕ при сохранении вызывает.
Что с работой на го? И сколько нужно потратить на вкат, если уже давно умеешь программировать на си, джаве, питоне, жс/тс, чтобы получать не меньше, чем на той же джаве?
>>1869742 Есть инфа от знающего человека, что у нас в языке скоро ожидаются реальные изменения. После того, как стабилизируют ситуацию женериками, уничтожат !=nil (запрещенный во всех языках эррор хендлинг), добавят оверлап интерфейсов. Тогда и сформируется окончательный альянс С и Java в одном флаконе. Спрос поднимется и будет держаться, тырпрайз ничего не сможет сделать. Сейчас главное не бухтеть.
>>1870253 > тырпрайз ничего не сможет сделать Тогда тырпрайз начнёт писать проекты на Go, в чём проблема. Вот только эксепшонов и дженериков для этого не достаточно, пока РЯЯ ПИШЕМ МАКСИМАЛЬНО EXPLICIT ЦИКЛИЧЕСКИЕ ЗАВИСИМОСТИ НЕ НУЖНЫ ПАКЕТЫ ЧЕРЕЗ ГИТХАБ А ЗАЧЕМ ВАМ ДЕБАГГЕР ФРЕЙМВОРКИ И ИНФРАСТРУКТУРА.
Поясните, пожалуйста, что нужно курить, чтобы понимать unsafe код? Вот, как пример - нашел в исходниках протобафа однострочную функцию, где i - это поинтер на интерфейс. >(*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]
>>1867480 лол бля с таким опытом 150+ я работал те же 9 месяцев джавистом - дай бог половину их твоего списка потрогал, в основном сидел кишки jvm и спринга изучал, и то охуел перекатился на го, зп у людей с моим опытом и навыками в диапазоне 120-180к
кто-нибудь знает о golangcourse.ru, стоит оно 45к на 3 месяца? это те же курсы, что и на курьере, но с живым код-ревью от директора из мейла и обещают помочь в трудоустройстве отличившимся
>>1870398 Я как-то пару раз прошёл готур (с перерывами между ними, ибо на первый раз нехуя не понял) и поговнокаживаю себе проектики Честно говоря, не очень представляю, как можно отличиться, пися на гошке если не в худшую сторону
что непонятного-то, привели интерфейс к пойнтеру, его привели к указателю на массив из двух пойнтеров и взяли второй элемент, тот в котором значение хранится (в первом тип)
>>1870505 Чувак, это ты не осилил понять, что я имел в виду.
Подобная путаная и двусмысленная хуита не подходит на замену джаве. Которая хороша именно своей простотой и недвусмысленностью. Поэтому на ней пишут энтерпрайз, понимаешь?
>>1870384 Окей, похоже по диагонали документацию читать было плохой идеей. >>1870487 >что непонятного-то Для меня не очевидно, что можно кастануть структуру с двумя поинтерами в арей поинтеров. Вообще что во что можно кастануть, чтобы это не упало и чтобы имело смысл.
ты вытащил от куда-то из кишков оптимизацию, которой обходят гошную типизацию, обманывают гц с аллокатором и напрямую работают с памятью
очевидно, оно тебе не нужно, и я гарантирую, оно норм работает в протобафе, а сам ты никогда руками писать такое не будешь а если будешь, получишь пизды от синьора и переделаешь
>>1870605 Пиздец тупые, просто блять фантастика. Это видимо они рассказывают в МВП треде, что пять лет назад вкатились бы, а сейчас требования не те >>1870611 На го делают только один тип проектов - микросервисную клауднейтив высоконагруженную джейсономешалку. Можешь ещё маркетинговых терминов насыпать
>>1870982 Ну ты же не гоняешь их по всяким RS-485 интерфейсам между коробочками, в которых всю эту хуйню нужно засунуть в пару килобайт, где половина кода работа с памятью, а половина гоняемых данных это контрольные суммы. А вот есть байтослесаря на заводах за 30000 в месяц занимаются подобной хуйней с паяльником в руках.
>>1870854 >>1870705 Писать о крестах в тред языка за авторством одного из главных крестовых отрицал, одной из мотивациий которого при создании тредязыка было поссать на кресты, лул
>>1870669 >очевидно, оно тебе не нужно, и я гарантирую, оно норм работает в протобафе, а сам ты никогда руками писать такое не будешь а если будешь, получишь пизды от синьора и переделаешь А на собеседовании могут такое спросить?
Вот почему в вашем говне пишут типы постфиксом и без разделителя? Не читается же нихуя, говно ёбаное, ну. Чего стоило там двоеточие поставить, как у всех нормальных людей?
>>1873719 >>1873736 Ну, если так, то ладно, пусть будет. Это, хотя-бы, имеет смысл, в отличие от шарпо-ебанины, например.
Взял сейчас каноничную книжку "The Go Programming Language", до этих вещей пока не дошёл, но, некоторые мотивации, стоящие за дизайном Go стали понятнее.
>>1873872 Декораторов, итераторов, контекстных менеджеров, реализации всего и вся через протоколы, которые достаточно реализовать в своем классе и оно будет работать. Только познакомился с синтаксисом и базовыми структурами и пилю бложик для практики. Ощущение, как будто от сишки, когда в универе лабы писал. Хотя может ещё не привык.
>>1873875 >Декораторов Никто тебе не запрещает обернуть одну функцию в другую. В го функции это тоже значения, как и в питоне.
>итераторов Реализуется при помощи дополнительной горутины и канала, тоже изи.
>контекстных менеджеров defer решает 99% задач контекстного менеджера.
>реализации всего и вся через протоколы, которые достаточно реализовать в своем классе и оно будет работать. Через интерфейсы это реализовывать на много круче, т.к. все явное.
>>1873886 > Никто тебе не запрещает обернуть одну функцию в другую Так ведь весь прикол в синтаксисе @decorator, который в Go в лучшем случае через кодогенерацию, которая зло.
>>1873886 >Никто тебе не запрещает обернуть одну функцию в другую. В го функции это тоже значения, как и в питоне. Так суть в сахарчке, который делает код изящнее, а не прописывание через аргументы
>Реализуется при помощи дополнительной горутины и канала, тоже изи. Я не совсем про это, в пистоне в классе достаточно реализовать два метода и все, с твоим объектом может работать все что угодно, что поддерживает этот протокол. а тут нужно ебаться с типами, мне очень не хватает темплейтов
>defer решает 99% задач контекстного менеджера. п. 1, вместо красивого разделения кода на вход и выход получаем мешанину без разделения логики
>Через интерфейсы это реализовывать на много круче, т.к. все явное. И это превращается с еблю с типами, что без темплейтов вызывает боль
Есть пару десятков тысяч файлов В каждом файле есть по методате, которую нужно спарсить Есть башскрипт, который генерит самые обычные хтмлы с тейблами и заполняется вручную (даже путь к файлнейму, поскольку он может меняться)
Есть страница, выдающая рандомный файл и которая должна иметь доступ к данным, заполненным в хтмл таблице, и метаданным, спаршенным из этого файла
Нужно перепроверять хотя бы достоверность линка к файлу из тейбла, как-то выжимать оттуда информацию (хтмл файликов с тейблами не тысячи, но может быть под несколько соток), парсить метадату из файликов и сделать страницу с рандом файлами рабочей
Использовать вебсервер с какой-то логикой и тем более базу данных принципиально нельзя (супер простой вс сервер я всё-таки всунул в утилиту, но нужно, чтобы всё могло работать и без него)
Утилита не должна требовать чего бы то ни было установленного, тем более нодмодулей, и не сосать по перформансу, насколько это возможно с фсшным и\о и говнокодным написанием, поэтому выбрал го
Промахнулся >>1873903>>1873883 >>1873875 Зачем тебе итераторы когда вопрос прохода по массивам в языке давно решен через улучшение циклов for при помощи range? Остальные слова не понял
>>1874711 Чувачок, оба коммента, на которые ты сослался - мои. Генератор - это yield, вот что такое генератор. В одной функции может быть много yield. А то, что у тебя - это хуита.
Если ты не понимаешь, что есть генераторы в питоне, можешь пройти в питон тред, и отсосать спросить там у первого попавшегося джуниора.
Скажи им, что ты сделал генераторы на го с прерыванием вычислений через выбрасывание ошибок, лол. И тебя обоссут всем тредом, с ног до головы, как ты любишь.
Что почитать про архитектуру проекта (сервера)? В частности всяких веб серверов. Никак не могу справиться с ростом проекта, в какой-то момент становится вообще нихуя непонятно что где и почему. Понимаю что вопрос скорее всего более обширный и не относится в частности к языку. В какой-то степени осознаю что это от неопытности, но где же взять этот блять опыт.
в остальном - читай книжки, как объектно-ориентированное программирование работает, потом читай опен-сорсные исходники, потом пиши сам и двигаясь так по кругу накопишь этот самый опыт
Почему нет конструктора недоклассов? Даже дефолт Посмотрел SO, везде предлагают делать отдельную функцию для создания объекта, даже для указания дефолтных переменных.
>>1875096 explicit is better, than implicit - одна из питоновских мантр.
Я имел в виду, что создатели го постарались минимизировать неявную работу с памятью. Вот что пишут в книжке GOPL: Go encourages an awareness of contemporary computer system design, particularly the importance of locality. Its built-in data types and most library data structures are crafted to work naturally without explicit initialization or implicit constructors, so relatively few memory allocations and memory writes are hidden in the code.
Не я виноват, что ты долбоеб полную дичь на серьезных щщах несешь - тебя ж тут читают, опыт перенимают
а потом я по полгода себе никого в команду найти не могу, потому что таких как ты начитаются - самомнения дохуя, а реальных знаний/опыта - пшик; генераторы в питоне у него потоки блять, это же просто пиздец дно
Чувааак, тебя вот тут https://2ch.hk/wrk/res/2149646.html братишки заждались, а здесь не надо демонстрировать глубину своей тупости, в это ни весело и никакой ценности не несет
>>1875097 Явности нужно в меру, иначе это заставляет разработчика писать кучу лишнего кода. Создатели сами поняли как обосрались и решили завезти темплейты в 2.0, как пример. Те же конструкторы это тоже просто функция, которую можно было бы и в методы структуры добавить, вообще ничего не изменится, кроме уродского способа создать класс с дефолтными параметрами.
>>1875191 >>1875198 Господи б-ж, какие же нехорошие создатели го, насильно заставляют бедных анончиков писать на своем ужасном и неудобном языке, ай-яй-яй, что же это в мире творится
>>1875206 Ты сейчас с попыток нормального объяснения просто оскорблениями начал кидаться. Авторы уже сами поняли какое ГОвно высрали. Надеюсь, что вторая версия все исправит.
>>1875219 Керниган в GOPL пишет: But it has comparatively few features and is unlikely to add more. For instance, it has no implicit numeric conversions, no constructors or destructors, no operator overloading, no default parameter values, no inheritance, no generics, no exceptions, no macros, no function annotations, and no thread-local storage. The language is mature and stable, and guarantees backwards compatibility: older Go programs can be compiled and run with newer versions of compilers and standard libraries.
Думаю, что в эту тему просто пришло много новых людей, без сишного бекграунда - джаваёбы, питонисты, рубисты (прости г-споди), т.е. люди, по-сути, программировать не особо умеющие. И язык теперь будет под них подстраиваться.
>>1875243 Generics are convenient but they come at a cost in complexity in the type system and run-time. We haven't yet found a design that gives value proportionate to the complexity, although we continue to think about it. Meanwhile, Go's built-in maps and slices, plus the ability to use the empty interface to construct containers (with explicit unboxing) mean in many cases it is possible to write code that does what generics would enable, if less smoothly. https://golang.org/doc/faq#generics
Они сделали приоритетными скорость работы и простоту. Т.к. закон сохранения никто не отменял, это означает несколько больший объём (кода).
Также, например, можешь поинтересоваться, почему го генерит такие большие бинарники.
гошка из простой и понятной скатится до состояния нынешнего питухона, когда каждый альтернативно мыслящий будет иметь голос да, питон когда-то был хорош
>>1875191 > Те же конструкторы это тоже просто функция, которую можно было бы и в методы структуры добавить, вообще ничего не изменится Так если нет разницы, зачем это реализовывать и использовать? Просто по тому что в том языке, к которому ты привык - так сделано? А смысл тогда новый язык создавать, а не дополнять существующий?
>>1875456 >>1875489 Странное ощущение, вроде как тут говорили про отсутствие дженериков, они формально есть, но по принципу "все или ничего". Да и вообще, в начале тура водят по типам и вообще, вроде как язык типизирован, а потом вылезает это.
>>1875564 А интерфейс указывает, что принимать можно только указатели? С ними еще понятно, потому что это просто ссылка в памяти, но не объекты же. Спокойно же можно создать array с разными типами через это.
>>1875579 Я к тому, что в сишке при указании войда ты можешь работать только с указателями. В го можно засунуть любой тип, это и странно, учитывая, что оно тут используется везде и неизвестно, ожидает на прием функция. Type safety проебывается.
>>1875570 >А интерфейс указывает, что принимать можно только указатели? Нет, любое значение можно превратить в интерфейс. Но при этом внутри интерфейсного значения лежит поинтер на тип и поинтер на оригинальное значение. Да и интерфейсное значение - к тому же, может быть nil, т.е. интерфейс - это тоже, своего рода, поинтер.
>>1875581 > Type safety проебывается. Так это и есть назначение пустого интерфейса.
Кто-нибуть пытался из error стринги собрать псевдо-стектрейс? По идее если раз'split'ить сообщение по ":", то для каждого куска скорее всего найдеться всего несколько совпадений по проекту, а если еще и отбрасывать на кажом последующем этапе все остальные бранчи, куда исполнение из текущей позиции не может дойти - почти гарантированно получаем единственный путь, по которому прошла ошибка. Мне кажеться странным, что это еще никто не реализовал подобную утилиту, с учетом того, что практически каждый гофер постоянно делает все это вручную.
>>1875687 чем обычная errors.Is/As не нравится? ну и можешь выкидывать свой тип ошибки в котором стактрейс уже лежит. >для каждого куска скорее всего найдеться всего несколько совпадений по проекту где-то я читал что рекомендуется каждую ошибку делать с уникальным сообщением как раз для этого >утилиту консольную утилиту или какую-то либу которая делает то что в принципе можно сделать без нее и довольно удобно? не понял короче.
>>1875727 Я сам из питона набежал, но разочарован этим, на прошлом проекте почувствовал, что нужно обмазаться типами и статикой. А тут то же самое в глотку засовывают
>>1875712 Ты не знаешь, может в опенсорс выкладывали?
>>1875873 >чем обычная errors.Is/As не нравится? ну и можешь выкидывать свой тип ошибки в котором стактрейс уже лежит. У меня немного другое видение этого. >консольную утилиту или какую-то либу которая делает то что в принципе можно сделать без нее и довольно удобно? не понял короче. errors.Is/As решает другую проблему - обработку ошибок в рантайме. Я же хочу сделать статический анализатор, которому буду скармливать строку ошибки, которую я достал из логов, и исходники. На выходе я хочу получить строки, на которых эта ошибка дополнялась через fmt.Errorf("bla-bla: %w") (или другими способами), чтобы на выходе получить нечто, похожее на стектрейс. > где-то я читал что рекомендуется каждую ошибку делать с уникальным сообщением как раз для этого Это разумная рекомендация, но я не уверен, что ее придерживаться в 100% случаев, по этому думаю как можно хендлить более неприятную ситуацию. По крайней мере я сам пару дней назад видел на работе 3 ошибки с одинаковой стрингой, но они все в разные бинари по итогу попадают.
>>1876199 >Я же хочу сделать ... Если от такого может быть реальный профит - это уже давно должно быть написано, и надо просто поискать. Но, у меня есть сомнения, что будет толк в общем случае.
Кстати, если такое писать, то лучше делать это на перле.
Задача такая, преобразовать строку так, что если после буквы стоит цифра, то сама буква повторялась указанное число раз. Наговнякал это, но кажется, что можно изящнее https://play.golang.org/p/mMas2Sldlju
>>1876241 Хуячь сразу в слайс байтов исходную строку (у тебя же там не юникод?) Вместо выходной строки - тоже слайс байтов.
При желании - можно захуярить в 2 прохода - на первом посчитать длину резульата, создать массив байтов, на 2-м - заполнить его. Найденные на 1-м проходе токены (буква+число или набор букв) можно сохранить в массиве слайсов исходного массива, чтобы не искать заново.