Это копия, сохраненная 24 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
GO (а также Golang, Пщ или просто Го) — язык с зелеными потоками на уровне синтаксиса и приемлимой стандартной библиотекой. Так как делать пакеджи не очень сложно, гитхаб полон пакеджами для абсолютно всего и разного качества.
Для вката в Go читай:
- Донован, Керниган "Язык программирования Go"
- https://www.golang-book.com/
- книги из списка https://github.com/dariubs/GoBooks
- Берд Барри "Java для чайников"
- а также смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Пэкеджи можно искать тут https://github.com/avelino/awesome-go
Сремся за отсутствие дженериков и ООП, смеемся с реализации дженериков в go2, спорим о том, какими скобочки должны быть на самом деле, пробрасываем ошибки, пытаемся понять почему код с каналами и многопоточностью работает медленнее, чем однопоточный код, находим по каждому крупному багу и косяку в языке пост в блоге го, который объясняет, что это фича, ищем обоснование, зачем дженерики не нужны, смеемся над оопэшниками, которые не могут жить без ексепшенов и DDD, дженериков и размазанной бизнес-логики, ждем, когда нам подвезут аналоги эксепшенов и дженериков
Прошлый тред успешно утонул в колее времени
У меня 11й тред почему-то здох нахуй и 404 возвращал. Шо поделать. Забей хуй, пусть утонет этот
Если смысл теперь в го, когда есть велеколепный раст?
>современный C++
Скажи в С++ до сих пор надо заголовочный файл создавать и в нем прототипы писать?
В C++20 завезли модули, в популярных компиляторах уже реализовано.
А чем тебе хедеры не угодили? Разделение интерфейса и реализации практикуется много где.
но ведь прототипы документируют код лучше документации (которую никто не пишет)
Вот есть у меня огромный класс из какой-то либы на С++, открываю заголовок и вижу какие у него методы и члены. И какие аргументы нужны для методов и т.д.
Вот в других языках такого дико не хватает. Там все вечно в говне, в одну кучу свалено, задалбливаешься листать тела каждого метода
Да, конечно есть всякое говно типа интерфейсов (но весь же код ими не обмажешь), диаграммы классов (а это лишние телодвижения), сворачивания блоков (которые еще надо свернуть).. Но это все не то
>Вот в других языках такого дико не хватает. Там все вечно в говне, в одну кучу свалено, задалбливаешься листать тела каждого метода
> сворачивания блоков (которые еще надо свернуть)
Любое IDE позволяет свернуть/развернуть всю реализацию одним сочетанием клавиш.
>типа интерфейсов (но весь же код ими не обмажешь)
Так на интерфейсах всё и пишется. Правда их обычно в отдельный файл всё равно не выносят.
Про го вообще можно не говорить, какое-то недоразумение.
Кресты лучше раста хотя бы тем, что у них более развитая инфраструктура. Это если говорить не о недостатках самих языков как таковых, а о реальной разработке.
Нашел чем мериться, сколько С++ существует, сколько раст, да еще в период перенасыщенности ЯП.
Дай такое же комьюнити расту, будет еще больше кода.
Это, имхо, более объективная мера, чем сравнение сомнительных преимуществ самих языков. Каким бы хорошим язык ни был, без либ толку от него мало.
Ну мы же живем в реальном мире. Нет такой физической возможности чтобы появился язык сразу со всем необходимым. Это даже глупо такое предъявлять конечно кроме прокси языков типа тайпскрипт, котлин, с++ совместимого в свое время с сями
Сравниваешь тёплое с мягким
Каким бы говном говно ни было внутри самого себя, как язык это всё еще компилируемость + гц + пакет менежер + отличный конкуррент
1280x720, 0:04
>Любое IDE позволяет свернуть/развернуть всю реализацию одним сочетанием клавиш.
Код смотрится не только в IDE, например код смотрится в браузере на том же гитхабе.
Я хочу открыть файл и сразу увидеть интерфейс, а не нажимать кнопочки (которые я не помню)
>>744692
>Так на интерфейсах всё и пишется
Заебешься все обмазывать интерфейсами, особенно там где оно не надо и никакого наследования в принципе быть не может и не должно.
>В том и дело что пишут все на интерфейсах, как и сказали код сворачивается легко, но на самом деле в любой IDE есть навигатор, где все удобнее.
это лишние телодвижения.
>>745008
>хедеры придумали не для документации
но юзают их для отделения определение от объявления. Поэтому программисты в сях придумали новый тип файла - .inc - когда определение не получается засунуть в c/cpp(особенно для шаблонов)
>это лишние телодвижения.
А переключаться между заголовками и имплантацией - это не лишнее телодвижение?
>А переключаться между заголовками и имплантацией - это не лишнее телодвижение?
А между классом и его интерфейсом?
Заголовок пишется один раз и надолго
Аутисты, зачем вам 2 треда?
Хорошего яп должно быть много.
Один для тех кто использует interface{}, другой для тех кто использует кодогенерацию.
И в обоих в основном постят те, у кого в языках есть дженерики или динамическая типизация.
Чисто потыкать палкой, на этом всегда и жили треды по го.
append и delete - магические функции, нельзя написать их аналоги средствами самого го, с попами и инсертами наверное решили эту магию дальше не плодить.
И еще вопросик. По ссылке передавая слайс и изменяя его будет примерно так
append((list)[:1], (list)[2:]...)
Не упрощается? Т.е. пробегал глазами по го туру и вроде было, что (*list) можно на просто list заменить, но ошибка
Там звездочка перед list
https://github.com/kardianos/service
Но я нихуя не вижу как именно нужно устанавливать go бинарь, через sc.exe?
Это все только для того чтобы переменную засейвить между вызовами?
Почему просто не сделать статическую переменную?
Как будто пишу на скресте самого лучшего из жса с хаскелем
Выслеживаешь го-сеньора, убиваешь его, переодеваешься в его одежду, ходишь вместо него на работу.
На самом деле там не требуется по три всего и ты можешь спокойно идти на собеседование. Подобные требования сделаны для отсеивания совсем долбаебов (видимо ты входишь в их число, раз тебя это тормознуло).
Ты скорее всего на работу не устроишься, ибо только знание языка без библиотек - это аутизм. Голэнгу можно научиться за месяц, и еще успеть внутрянку затронуть. Вся суть голэнга в инфраструктуре. Тебе в любом случае нужно знать хоть что-то из этой области. Потыкай rabbitmq и в целом поверхностно узнай как инфраструктура микросервисная строится, что применяется. Попробуй что-то простенькое поднять на 3 с половиной сервиса.
В голэнге обычно ищут людей, у которых есть бэкграунд на других языках. А судя по тому, что тебя удивили очереди и логирование - ты пытаешься вкатиться с нулевой базой и без знаний.
В голэнге намного сложнее джуна брать, ибо его обучать придется год. А, напирмер, пхп или питониста можно за пару месяцев подготовить, соответственно и требования почти нулевые (опять же не нужно смотреть что в резюме требуют тысячу технологий).
> Зачем нужны функции возвращающие функции?
Потому что добавь в функцию, возвращающую функцию, два-три параметра и представь себе комбинаторный взрыв если у тебя вместо генератора придется писать функцию на каждую комбинацию этих параметров.
Собственно, хочу узнать, есть ли какие-нибудь удобные подобные инструменты чтобы заниматься "реверс инжинирингом" навроде функции пикрил.
Функция выводит все содержимое любого типа любой вложенности даже приватных полей (пиркил 2).
Спасибо
То, что функцию нельзя вызвать извне, не просто так сделано, наверное? И инкапсуляцию, наверное, не просто так придумали?
Вообще, инструмент такой есть. Называется Ctrl-C Ctrl-V
.
http://www.alangpierce.com/blog/2016/03/17/adventures-in-go-accessing-unexported-functions/
Не помню, чтобы кто-то говорил про простоту вката в го. Речь обычно идет про простоту самого языка для того, чтобы начать на нем писать что-то внятное - это все еще правда.
Ну через рефлексию в любом случае устанавливать эти значения нельзя, но для понимания общей картины, контекста происходящего, особенно если код не библиотечный, почему бы и не посмотреть. Как минимум дебаггер такую возможность предоставляет.
Просто думал может есть какие-нибудь удобные готовые инструменты.
Можно и сложнее, но шоб разжевали.
Мне надо откуда-то брать пркладную инфу, и потихоньку ее тащить в свою задумку.
можешь на ютубе глянуть gopher school - там чел пишет простую веб-прилу. я с некоторыми вещами не очень согласен (например, работа с бд), но объясняется там неплохо + чел сразу тесты пишет
elixir те ещё аутисты. никто за него крупная компания не стоит, соответственно пустая трата времени. ты либо тролишь или отсеиваешь конкурентов.
Сап, ребята. Помогите определиться плиз. Я сейчас пишу на питоне веб приложения типичные, стек django. Есть вариант вкатиться в fastapi/sqlalchemy и т.п., либо вкатиться в го. Как думаете, лучше потратить сейчас время на полное изучение одного языка с его либами, всей, так скажем, "экосистемой", или сейчас параллельно учить го? Потому что складывается ощущение, что писать бэк на питоне несерьезно что-ли...
Я тебе так скажу. Тебе нужно определится по поводу языка. Выбрав другой язык, твои программы не станут лучше, ценного опыта не наберешь, и денег не заработаешь. Коль выбрал питон, и полностью его освоил дойдя до fasapi (ведь так? Или ты просто бэнчмарков наелся и реши что просто так начнешь API на нем клепать ?), означает что можешь работать. Как будет опыт мидла, сможешь трезво оценить ситуацию и если понадобится перейти на другой язык. Так что мой тебе совет, не мотайся от языка к языку, освой достаточно один, а там двигайся в любую сторону.
Надеюсь, что хотя бы в одном варианте будет паника.
Тебе вообще ничего не нужно. Лучше по мусорным бакам ходи.
Есть функция, отправка Post запроса на сайт (Больше ничего). Если я делаю цикл в мейн функции с запуском 100 горутин, то fmt.Println(runtime.NumGoroutine()) показывает, что горутин многократно больше. Если эту функцию заменить на обычный вывод текста, то все нормально, горутин столько же, сколько запускается. Кто нибудь подскажет почему так? Больше спасибо
Можно предположить, что функция, которой ты делаешь POST, под капотом создаёт другие горутины.
нахуя тебе трайкэтч?
Да, есть такой момент. На некоторые сайты горутин столько же сколько ожидается, а если гугл пинговать - многократно больше (И с некоторыми сайтами тоже)
Че понятно?
Из-за каналов и многопоточности.
Смотря какой код
А почему лучший в мире? Для жнетрпрайзм все еще Ява и С++, для ндроеда Котлин, для айОС свифт.
А в некоторых не знаменит.
А я не вижу плюсов в энтерпрайзе. Ты сейчас в 1995-м?
Го — это суслик, он есть, но ты его не видишь.
return nil, err
}
if err != nil {
return nil, err
}
if err != nil {
return nil, err
}
Выглядит как рапчик.
С ЧЕГО НАЧАТЬ? Краткий курс го прошёл
С изучения APi инсты.
Блокчейн
goroutine 1 [running]:
main.main()
C:/Users/User-1/src/github.com/k0kubun/tetris/tetris.go:124 +0x179
XD
Но ты описываешь свой опыт, который не похож на мою ситуацию. Как можно с недоджуна перекатиться на миддла?
Стоит ли тогда сначала на поработать на стэке с большим числом вакансий, чтобы получить хоть какой-то опыт, а потом пойти в голанг? Или сразу учить его и долго ходить собеситься?
У меня в основном все айти - это хобби энтузиазм и ковыряние своих "пет проектов" дома, официально работать прогером не приходилось.
>официально работать прогером не приходилось
Ну тогда учи го и вкатывайся в стажёры или джуны, вон в вайдбнрис и вроде ламоде берут, в авито, в озоне тоже (но хз насчёт джунов в озоне)
На го нет джунских вак. Бери нормальный устоявшийся язык - жабу или шарпы. 2 года с ними поработай, стань милом и двигай в свое го, если оно к тому времени не скурвится, как в свое время RoR.
Как сделать кастомный тип ID,чтобы без большого труда можно было бы его заменить с int64 на string?
Сделала type ID int64, было бы отличненько, если бы не необходимость сканировать из постгреса массив. А его нужно оборачивать в pq.Array, который не может тип []ID кастануть к []int64.
Ну, функцию pq.Array можно переписать и расширить, но я все равно не особо представляю как []ID приводить к []int64 =(
Еще вариант придумала, звучит как плохая идея, но все равно поделюсь
сделать type ID int64 и type IDs []int64 с пометочкой в комментариях "МЕНЯТЬ ВМЕСТЕ!11!!!1!"
Вот мой тимфюрер тоже так думает, по этому я, вместо того, чтобы генерить сервер и клиент из OpenApi спецификации - копипащу структуры между 6 микросервисами и обмазываю это болейрплейтом в рукопашную.
Если ты знаешь финальный размер слайса - эфективнее будет сразу алоцировать слайс нужной длины (или вместимости, если удобее через аппенд)
https://play.golang.org/p/EuSozdMlme0
Скажи ему спасибо, что позволяет тебе получать деньги за работу, которую бесплатно делает кодогенератор.
Успокойся, я просто бабой прикинулся чтобы мне быстрее ответили, всем спасибо все свободны.
Ты опять все спутал, анон. Это тред по го, а не по скидыванию сисек в четвертом посте
go modules
ПЕРЕКАТ
>>1736180 (OP)
>>1736180 (OP)
>>1736180 (OP)
>>1736180 (OP)
>>1736180 (OP)
ПЕРЕКАТ
У меня есть небольшой опыт PHP, а конкретно кастомизации компонентов под битру и их написание, много верстал, занимался сеошкой, рекламой(очень типичная вакансия в мухосранске). Чекаю инфу на метаните и golangs.org - просто, а самое главное интересно, в отличии от тех же фреймов пыхи(хз почему, но не зашел ларавель). Собственно с соображалкой проблем нет, инфу, опять же, если интересно, усваиваю\понимаю\принимаю лучше других(ориентируюсь на дногруппников). Анон, если не сложно, подскажи конкретнее. Со знаниями курса с метанита и сайта выше, плюс, например, чат-бот для телеги, плюс, например, интеграция каких-либо сервисов с сайтом(для мини-портфолио и в первую очередь собственного знания), каковы шансы устроиться таки в ДС2?
Вопрос конечно ебанутый, все индивидуально и тд и тп, к тому же понимаю, что лучше задрочить фреймворк php, но блять не интересны они почему то
я думаю что шансы более чем, особенно если учесть, что бывают вакансии Perl/Go, PHP/Go, Python/Go, намекающие, с чего на что надо переписать
Хз ,я из Новосибирска, нескольколет назад штук пять было, получил оффер. Потом решил уволиться и переехать, за месяц собесов (подался штук 10 компаний) получил несколько офферов в Москву и Питер, некоторые даже удалённо.
Это не php, конечно, в каждом втором подавале на го не пишут, зато вакансии в большинстве нормальные и рейты не самые плохие.
func DoStuffInt(value int) int { ... }
// Ctrl-C Ctrl-V
func DoStuffString(value string) string { ... }
// Ctrl-C Ctrl-V
func DoStuffNebo(value Nebo) Nebo { ... }
// Ctrl-C Ctrl-V
func DoStuffAllah(value Allah) Allah { ... }
// заебался
func DoStuff(value interface{}) interface{} { ... }
Когда исправят очевидные дефекты в языке, тогда и перестанем.
Завозить нужно будет ещё много чего, кроме дженериков и эксепшенов.
- нормальные структуры данных (ring, list, heap - это даже не смешно)
- полиморфизм
- аннотации
- заменить ошибку на варнинг при неиспользуемых импортах или переменных
- система пакетов - это вообще пиздец, один прибитый гвоздями Git чего стоит.
>эксепшенов
нахуя нужны?
>полиморфизм
не понимаю, почему полиморфизм выделен в отдельный от дженериков пункт. в языке есть интерфейсы. какой еще полиморфизм нужен? дженерики? либо я просто не понимаю, что такое полиморфизм, объясни, пожалуйста
>заменить ошибку на варнинг при неиспользуемых импортах или переменных
что плохого в том, что компилятор бьет тебя по рукам за хуевое оформление кода?
> нахуя нужны?
Чтобы сократить объём кода на 50%, и его стало легче читать.
> полиморфизм
Я проебался, имел в виду перегрузку методов, чтобы можно было несколько одноимённых методов с разными сигнатурами.
> что плохого в том, что компилятор бьет тебя по рукам за хуевое оформление кода?
Если пишешь какой-то тестовый код, где всё время комментишь/раскомменчиваешь строки кода, которые юзают импорты или те переменные, приходится каждый раз прыгать по всему коду и все эти импорты и переменные тоже комментить, либо писать костыли наподобие fmt.Print(""), чтобы компилятор, считающий себя самым умным, перестал выёбываться.
>Чтобы сократить объём кода на 50%, и его стало легче читать.
это, конечно, правда, но, имхо, подход с передачей ошибок между слоями приложения более правильный, чем выброс исключения в никуда. например, выбросил ты исключение из доменного слоя, а обрабатывает его кто-то (и вообще, обрабатывает ли?) на уровне хттп-обработчика. понятно, что все зависит от уровня развития макаки, которая работает с твоим кодом и исключением, но гарантий того, что ошибка будет обработана корректно, больше в случае с гошным подходом. + необработанная ошибка в го не приведет к остановке всего приложения, как в случае с необработанным эксепшеном, а это зачастую важно
>приходится каждый раз прыгать по всему коду и все эти импорты и переменные тоже комментить
а IDE какую юзаешь? goland, например, автоматически убирает импорт, если в файле пакет не используется. думаю, для других редакторов таких плагинов тоже хватает. не думаю, что подобные проблемы следует решать изменениями в языке/компиляторе
> Если пишешь какой-то тестовый код, где всё время комментишь/раскомменчиваешь строки кода
То может нужно голову включить а не тыкаться?
> подход с передачей ошибок между слоями приложения более правильный, чем выброс исключения в никуда. например, выбросил ты исключение из доменного слоя, а обрабатывает его кто-то
Проброс ошибок тоже ничего не гарантирует. Часто уже на автомате пишут "return nil, err", даже не задумываясь, что это за ошибка, либо понимая, что на этом уровне её не обработать. Почти как checked exceptions в жабе.
> на уровне хттп-обработчика
> необработанная ошибка в го не приведет к остановке всего приложения, как в случае с необработанным эксепшеном
Я такое только в плюсах видел, чтобы эксепшен не ловился где-то на самом верхнем уровне и не обрабатывался, а приложение аварийно завершалось. Обычно везде есть минимальный дефолтный обработчик, который всё оборачивает в 500 Internal server error.
> а IDE какую юзаешь?
Я не пишу на го всерьёз, поэтому goland не видел. Но без редакторов с автоматическим удалением импортов писать на го очень больно.
> не думаю, что подобные проблемы следует решать изменениями в языке/компиляторе
Ну а я думаю, что проблемы стиля должны быть именно варнингами, код-то рабочий. И изменение не должно ничего сломать, это ведь разрешение того, что было запрещено, но не изменение поведения.
С таким подходом можно до ассемблера докатиться.
>необработанная ошибка в го не приведет к остановке всего приложения, как в случае с необработанным эксепшеном, а это зачастую важно
ага. только вот если что то идет не так, то в итоге получается не то. и работать потом с невалидным стейтом такое себе.
исключения ругают за неявность, мол хер узнаешь что там прилетит
вот только вообще в принципе невозможно знать все возможные ошибки. сегодня код работает с сервисом который с файлами работает, а потом подменяется на тот, что из сети данные берет (а никто сетевые ошибки и не ждет), а то и вообще новую имплементацию подкинули в рантайме, а там деление на ноль - то есть обычный подход, когда логика инкапсулируется и снаружи банальная абстракция и кишки не лезут наружу.
То есть может возникнуть то, чего не ожидали независимо от используем ли мы исключения или ошибки (если конечно язык не убогий на уровне синклер бейсика), а значит попытка обработать все возможные ошибки обречена на провал. Мы их а) не знаем б) один хер пропускаем выше ибо не знаем что делать
так в чем разница?
и с исключениями нужно сделать так, чтобы ошибки не проходили границы контекста и наружу полетит ожидаемое исключение а не черт знает что
а еще удобно разделять системные исключения и приложения. я хз почему это считается антипаттерном если это люто удобно. - все что пользовательское ловишь и реагируешь. Системные ожидать бесполезно. это в 999999% случаях баг и нужно просто не дать пройти границы контекста и сделать невалидный стейт
>Я проебался, имел в виду перегрузку методов, чтобы можно было несколько одноимённых методов с разными сигнатурами.
Говно для даунов. Возвращайся в плюсы и жри там это неявное поведение. Разве нормальному человеку нужно, чтобы метод с одним и тем же именем имел разное поведение, в зависимости от типа аргумента?
>Разве нормальному человеку нужно, чтобы метод с одним и тем же именем имел разное поведение, в зависимости от типа аргумента?
нормальному человеку нужно чтобы метод мог в себя принять разное то что у тебя с собой есть, а не заставлять тебя искать "а как привести все к тому виду как ему надо" или гадать "а вот у меня с собой это и как бля называется нужный метод"
про паттерн visitor и деревья вообще можно не вспоминать )
>Разве нормальному человеку нужно, чтобы метод с одним и тем же именем имел разное поведение, в зависимости от типа аргумента?
Нахуй нужен, конечно. Лучше вот так насрать:
https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glUniform.xhtml
>>810034
Пардон, что так грубо, но эта фитча скорее не нужна, т.к. большинство людей - идиоты, и скорее всего будут злоупотреблять этой фитчей, и компилятор не сможет проверить, одинаковое ли поведение для, скажем, оверлоада с аргументом стринга, и для оверлада с аргуметом байтслайса.
>>810037
Да, но с овелоадом - все то же самое, только весь этот пиздец еще и называется одним именем
>компилятор не сможет проверить, одинаковое ли поведение для, скажем, оверлоада с аргументом стринга, и для оверлада с аргуметом байтслайса.
Ага, ведь в других языках таких сложнейших фич нет.
Я писал, что фитча не нужна, по тому что ей будут злоупотреблять, а не то, что ее нельзя реализовать. Дженериков и интерфейсов всем должно хватить.
>Да с чего ты взял что перегрузки должны делать одно и то же?
С того, что это один и тот же метод, с тем же именем
>С того, что это один и тот же метод, с тем же именем
и что с того?
ты в функциях if к параметрам используешь? если да то у тебя функция значит делает разное в зависимости от переданных значений
хотя имя то одно.
В плюсовой, например, реализации - это выглядит как несколько блоков, несколько методов с одним именем, которые могут вообще не иметь общего кода, в отличии от метода с if/switch по параметрам, которые, скорее всего будут иметь общий код до и/или после ветвления.
А ну расскажи мне как обойти дерево с нодами разных типов без visitor
if и его аналоги не предлагать - за это бьют розгами
Лолкек, как ты в го сделаешь дерево с нодами разных типов?
Через интерфейсы, через интерфейсы же и обходить будешь.
дык во всех языках ноды приведены к чему то базовому
и паттерн визитор как раз и делает связывание вместо if
Да, а что не так? Шажочек за шажочком дойдём до убийцы C++. Людям не нужно всякое говно типа раста или го, им нужны безопасные кресты.
Неужели ты считаешь, что ущербный раст сейчас способен заменить Великие Плюсы?
Продукт нужен быдлу, а людям нужна духовность, которую можно найти в том числе и в программировании, осмотрено в сложных языках наподобие Плюсов.
ПодДвачну этому борщехлебу
нехуй что ответить - пошел нахуй псина
>gccgo для винды есть?
помню там еще лет 8 назад хотели пилить gccgo под винду, но воз и ныне там?
Сначала пришел к виду map[string][]string , где как ключ хранится сама ссылка на объявление, а значение - список подписанных юзеров. Вопрос, как можно к этой структуре корректно привинтить ещё одно значение цены?
Я могу не хранить цену в структуре, но тогда каждый раз мне придётся ходить в БД и доставать её, для сверки на предмет актуальности.
Я крч подумал и решил что лучше хранить это в двух разных мапах. В одной map[string][]string - список подписанных емэйлов, а в другой map[string]string - актуальную цену. Так наверное лучше будет.
Можно какой нибудь рэдис использовать для хранения ). Просто если учесть что будет много отслеживаемых товаров и каждый раз для сверки цены приложуха будет ходить в БД - это наверное ужас.
да на самом деле от кол-ва запросов и данных зависит. при низкой нагруженности ты издержек от хождения в БД не ощутишь особо, имхо. а при высокой лучше действительно редис заюзать
мне нужна сборка мусора, и горутины, этот язык попроще ++ будет, и получше. С коробки почти все есть, что надо.
потому что много отладочной информации содержит бинарник, попросту - не нужной для обычного юзверя, и сильно помогающий реверсеру
Да, убийцы C++ действительно не хватает. Но это ещё не повод брать Go.
Убийца плюсов, как по мне, это потихоньку набирающий популярность Rust, хотя есть ещё и D Language.
на сервере не надо ничего защищать?
>Но это ещё не повод брать Go.
а что тогда брать? Компилируемое, не borland
В го много чего доступно из коробки, чем подкупает, и компилируется в натив, ну и сборка мусора как доп. фишка. Где еще такое есть?
>>814513
слышал, что на расте еще больше бинарник весит, чем на го, это так?
Убийца плюсов уже есть ведь, это раст. Двачую то, что сравнивать го с плюсами это какой-то бред, вообще из разных опер языки
> на сервере не надо ничего защищать?
Надо, доступ к самому серверу. А если доступ защищён, то на самом сервере пускай хоть вообще всё открытым текстом лежит, юзеры всё равно не могут это прочитать.
> а что тогда брать?
Не знаю, но точно не Go. Я тут пытался заставить Go работать с dll-ками и с либами без исходников, там всё очень плохо, причём это не недоработка, а принципиальная идеология языка.
У раста, говорят, инфраструктура хреновая, но с другими компилируемыми в нейтив языками всё намного хуже. Да и вдруг у раста тоже нельзя сделать strip.
>слышал, что на расте еще больше бинарник весит, чем на го, это так?
Честно говоря, не проверял, но разница там не особо большая.
>на сервере не надо ничего защищать?
Надо, но удалением отладочной информации ты ничего не защитишь, а только усложнишь исправления проблем.
>слышал, что на расте еще больше бинарник весит, чем на го, это так?
Они там жирные, но не настолько, на сколько в го. Если критичен вес - используй strip
>>814551
Но ведь раст разве что Мозилу убить сможет. Он ещё не готов к продакшену, гора зависимостей в альфа/бета версиях, все либы тухлые, документация пилится энтузиастами, дебагера нет, многие фичи языка пердольные - та же асинхронность. Ну и скорость не впечатляет по сравнению с Zig или хотя бы V. Волна популярности раста прошла и после неё оказалось что лишь единицы пердоликов готовы кодить на этом говне. А свежие проекты, где важна производительность, всё так же пишут на си/крестах + асм-вставки.
> Я тут пытался заставить Go работать с dll-ками и с либами без исходников, там всё очень плохо
Что у тебя плохо там? В Go встроена сишка и полная совместимость со всеми сишными либами, просто инклюдишь хэдеры и указываешь компилятору где либы брать. С крестами естественно не будет работать, нужен С-интерфейс в либе.
Я хотел именно на Go, а не через FFI. Но это уже неважно.
>Ну и скорость не впечатляет по сравнению с Zig или хотя бы V
Ты серьезно zig или v рассматриваешь? Это вообще ноунеймы, нет смысла даже думать о них. V вообще какое-то васянское поделие, кривой копипаст го. Но про скорость интересно, есть пруфы?
>Волна популярности раста прошла и после неё оказалось что лишь единицы пердоликов готовы кодить на этом говне.
Это уже толсто. Пруфов не будет, я уверен.
>А свежие проекты, где важна производительность, всё так же пишут на си/крестах + асм-вставки.
Чаще всего да, но есть и на расте свежие проекты.
Кодогенерация лучше дженериков, потому что код получается проще. Дженерики вообще не нужны. Их отсутствие в го - достоинство языка.
> Их отсутствие в го - достоинство
А я всё думал, почему котлин у меня так сильно ассоциируется с goвном. А всё из-за уебанского отношения к кодерам вместо того, чтобы дать им выбор. В котлин-треде тоже недавно писали, что какой-то там тип специально сделан ущербным, чтобы его не юзали. Пиздец.
Да зачем вам эти дженерики вообще?
За все время моего программирования на го, дженерики были нужны только для каких-то небольших util функций, которые несложно и скопировать в случае чего.
>>809387
>> думает, что кодогенерация появилась от хорошей жизни
Кодогенерация появилась не для замены дженериков
Потому что проприетарные мудаки, которые хотят спрятать свой код и защититься от хакеров которые мешают получать недополученную прибыль - не нужны.
А ещё книги, фильмы и игры должны быть бесплатными, да и вообще коммунизм.
>А всё из-за уебанского отношения к кодерам
Всё верно, кодер должен быть легкозаменяемым винтиком, а не незаменимым пересидельцем уровня сеньера-застольного кореша гендира с охуевшими требованиями по повышению зарплаты.
Поэтому все кодерки должны думать одинаково - их нужно дрессировать быть рабами чтоб бы они при этом со счастьем на лице обмазывали ебло малафьей и самостоятельно траллили тех своих коллег, кто рабами быть не хочет и обзывали быдлокодерами, показывали пальцем и смеялись, в перерывах в курилках обсуждая новые модные кандалы.
> в перерывах в курилках
Чего блядь, в каких курилках, какие назхуй переывы, никаких перерывов, только спецально одобренная корпоративная ржомба в специальных корпоративных чатиках в телеге.
В том смысле, который я обозначил, это именно синонимы
Как в сишечке - меньше килобайта.
Ясное дело, что все это - писькомерство, но в некоторых особых случаях это может быть важно
Так гошечка и не позиционирует себя как средство для микроконтроллеров, где размер бинарника важен
Так и есть. Претензии к размеру бинарника какие-то надуманные, это вам не сишечка. Но вообще есть такое решение: https://github.com/tinygo-org/tinygo
Мимокрок
>go for command line tools
Если это не нужно для каких-то тяжелых вещей, то за это убивать нужно
За что убивать? За написание cli tools на го? Да ты же поехавший, на го как раз особенно часто их пишут, и не удивительно, он для этой цели отлично подходит.
У меня просто жопные боли были, когда наш девопс настроил деплой через бинарники на го и на каждый пук необходимо к нему было обращаться, так как исходники он не давал
намного лучше более популярных альтернатив вроде петона - закинул себе в патх и пользуешься, не ебешь мозги никакими плагинами. лучше только посикс или баш с корутилзами.
Ну реально, зачем тебе? Тебе же тулза нужна чтобы в ней запускать команды
> Но про скорость интересно, есть пруфы?
Естественно. На TechEmpower либа jsonа быстрее на v, чем на сишке. Zig вообще в любых бенчах рвёт сишку, посмотри у них на сайте, но пока на нем ничего не пишут серьезного из-за breaking changes, которые в один список не влезают.
> Это уже толсто. Пруфов не будет, я уверен.
Последний год звёзды быстрее v набирает, чем раст. Куча либ на расте были на хайпе в 2018 написаны и до сих пор тухнут. Сам язык замер без изменений, а фиксить там ещё много чего.
Про либу jsona на techempower:
У раста may-minihttp1,593,722
У V pico.v 1,617,611
Разница очень маленькая, а ты говоришь раст по сравнению с V не впечатляет
Зачем вообще сранивать с монстрами, типо явы, где пилятся гиганские бабки, с гигансткими командами, с гигансткими бюджеты, с гигансткими сроками.
Если ты начинаешь молодой стартап с небольшим бюджетом, или MVP, то гошечка после идеальна.
Начненать на яве или С++, это уже автоматом выстрелить в ногу.
>Зачем вообще сранивать с монстрами, типо явы, где пилятся гиганские бабки, с гигансткими командами, с гигансткими бюджеты, с гигансткими сроками.
Потому что все собравшиеся на этой доске здесь именно ради этого. И любой выстреливший проект придется всё равно переписывать в говно-кроваввый интырпрайз
> пилятся гиганские бабки
И именно по этой причине даже под дохлый и никомку в 2K2D не нужный бекенд на ноде есть куча маняорм-фрейморков и прочих тру-энтерпрайз клонов Spring вроде NestJS.
> Зачем вообще сранивать с монстрами, типо явы
Сравнивают потому что на го можно быстрее и эффективнее делать то, что можно через боль и страдания делать на жяве
Ебало завали
Нет, го это микросервисный йоба-хайлоад
https://github.com/odoo/odoo/blob/14.0/odoo/service/model.py
Как с таким говном еще кто-то считает питон стильным модным молодежным классным языком? Это же какая-то процедурная параша уровня как раз вышеупомянутых цмс на пхп
У нас на работе обязателен type hinting через mypy и проверку кода на стиль и синтаксические ошибки через black перед коммитом.
На пике рач у которого breaking changes вообще норма
Слишком утрированно, на любом ЯПе сразу обновляться не следует
У меня в проекте овер9000 тестиков, мне вот интересно, как мне уменьшить дублирование кода в них.
В тех же ПХП, на котором в компании есть легаси код, я заметил люди пишут бдд тесты просто текстом.
типа, "Given user" = func() { user := User{} }
Given User
When bla bla
Then this one
Хотелось бы так же, чтобы я описал тесты в виде текста, а условия были маленькими функциями
Этот язык называется Gherkin
https://cucumber.io/docs/gherkin/
У него даже есть специфицикация.
Придуман для менеджеров.
https://www.google.com/search?q=gherkin+golang&oq=gherkin+golang&aqs=chrome..69i57j0l2.7673j1j7&sourceid=chrome&ie=UTF-8
Помнится, про SQL тоже кто-то так говорил.
ты серьезно? тут не просто новости рача или петона читать нужно, тут нужно сканировать код для всего петоноговна, которое у тебя установлено, чтобы узнать, ломает ли новый кейворд петона какой-то пакет. делать это вручную или как ты написал "читать" это брейнлет-тир, эту задачу должен решать не пользователь.
Что бы был кли и возможность деплоить функции на разных провайдеров?
Очень тупо:
package main
// # include <stdio.h>
// прочий сишный код
import "C"
func main() {
C.puts("Hello, world!")
}
И тупо скомпилировать как обычный исходник на Go.
Имей в виду, что сборщик мусора Go не будет за тебя вызывать free() в сишном коде, тебе придётся это делать самому, иначе утечка памяти.
Ок.
>тут не просто новости рача или петона читать нужно, тут нужно сканировать код для всего петоноговна, которое у тебя установлено, чтобы узнать, ломает ли новый кейворд петона какой-то пакет. делать это вручную или как ты написал "читать" это брейнлет-тир, эту задачу должен решать не пользователь.
А вот в ГО совсем не так!
https://kn100.me/making-breaking-changes-in-go/
Кто-то до сих пор не может запомнить, что эта ебанистика создает копии, а не обращается по адресу ?
>диаграммы классов (а это лишние телодвижения), сворачивания блоков (которые еще надо свернуть).. Но это все не то
лишние телодвижения это переключаться между файликами и править сигнатуры в двух местах. за компуктер не нужно делать работу, которую он может делать сам. вручную дублировать код для компуктера это вообще бловс май майнд
>Поэтому программисты в сях придумали новый тип файла - .inc - когда определение не получается засунуть в c/cpp(особенно для шаблонов)
Стокгольмский синдром по-крестоблядски: ебаная в жопу крестоблядь после всего времени насилования своего мозгообразного органа крестами просто не может осознать, что можно и не выносить декларации в отдельный файл, она даже когда крестокомпилятор запрещает ей это, все равно обходные пути так делать - и, сука, находит.
> как заапендить слайс через передачу в аргумент
а я аж растерялся.
Действительно, как?
Толсто.
Есть одна проблема. Сериализую сообщения, отправляю о очередь. На другом конце принимаю и пытаюсь десериализовать, но получается десериализовать почему-то не все. Не понимаю, как это возможно.
Кто может глянуть:
https://github.com/hageshtrem/go-rabbitmq-protobuf-issue
я не спец, но сообщения в реббите это строки, а ты в них байты пихаешь
Аноны, как научиться в абстракции? Пишу уже 7 год, но до сих пор хуёво с этим. Понятно, что все эти годы я говнокодил по большому счёту, но в моём коде хотя бы можно было разобраться, он линеен. Не так давно осознал, зачем вообще делать интерфейсы, лел. Раньше думал раз тестов пока нет, мокать нечего, ну и нахуй они нужны, если реализация всё равно одна?
Вот сейчас пришёл на новую работу, так тут понаписано пиздец, хуй что где разберёшь. Какие-то финализаторы, фасады, ресурс контейнеры, охуеть вообще. Вообще легально так писать на Го? Попахивает тырпрайз жава парашей.
Нужно как минимум понять, что и зачем здесь так написано. Я смотрю на всё это и не понимаю, как блядь человек в состоянии это всё написать? Это врождённый навык или можно начитаться книжек по паттернам и писать так же? Советуйте в общем, что делать.
Первое время тебе этот код будет казаться сложным, потом привыкнешь и будешь восхвалять тех, кто это написал до тебя.
По моему мнению, если изначально думать о тестировании кода, то абстракции будут пониматься отлично. Потому что легкое тестирование = легкая заменяемость в коде.
Да и ты же не хочешь в своём коде тестировать имплементацию библиотек сторонних (для этого у них есть свои тесты)
>Вообще легально так писать на Го? Попахивает тырпрайз жава парашей.
Так го тоже предназначен для тырпрайза. Посмотри исходники k8s, например.
ну если читать книги типа банды четырёх - то там вроде нормальные примеры.
А вообще я обычно руководствуюсь тем, что мне нужно покрыть полностью код тестами и если не получается - значит что-то делаю не так.
У меня нет такого типа, о тут надо фасад сделать или ещё что-то - оно просто в голове уже лежит как сделать лучше и всё.
Ну и SOLID принципы конечно же.
>Нужно как минимум понять, что и зачем здесь так написано
жависты наверное переучивались. они ебанутые, не смотри на них.
>Это врождённый навык или можно начитаться книжек по паттернам и писать так же?
мне кажется обычно это врожденное, но иногда люди такими становятся из-за каких-то событий в жизни
Двачу этого гофера, всему нужно знать меру.
Ну просто берешь какой-нибудь паттерновый монстрофреймворк типа спринга или симфони и изучаешь исходники.
А как вообще реализация патернов другого языка поможет на go, наг голнаге же везде СВОЙ ПУТЬ
В настоящий момент имею опыт работы фронтом 8 месяцев (Реакт/редакс), плюс 2-3 месяца дроча гошки (из пет-проектов есть примитивный rest-api плюс cli, которая конкурентно дергает апишку и выводит текущую стоимость криптовалют, сохраняет историю их цены в csv).
В теории понимаю БД и докер (что и зачем нужно, какие виды бд есть, их типовые сферы применения, зачем нужны индексы, что такое шардинг), подтянул часть с сетями (tcp/ip стэк, udp/tcp, отличия версий http, могу на пальцах объяснить что происходит после ввода адреса сайта). С линуксом знаком (4 года manjaro/fedora на десктопе).
Хотел бы узнать насчет типовых тестовых заданий на гофера в компании ДС-а дабы задрочить эти типовые проекты и выложить их для портфолию (а-ля мувисерчер на фронтендера).
Список теоретических вопросов по го из прошлого треда видел, и могу на них ответить, но практики с БД/докером нет вовсе, плюс сейчас дрочусь с литкодом для практики алгоритмов/структур данных. Также хотелось бы получить советы тех, кто прошел схожий путь из фронтов в бэки (на чем лучше сосредоточить внимание, до какого уровня дрочить литкод, насколько глубоко копать в БД и их оптимизацию и докер и тд.)
Сделай на го интернет-магазин с админкой для добавления новых товаров и личным кабинетом юзера с корзиной, засунь в докер. Все сразу поймешь. Но это тупо для крудознаний, надо еще разобраться с кафкой и/или рэббитом и тоже их куда-то воткнуть
> Также хотелось бы получить советы тех, кто прошел схожий путь из фронтов в бэки (на чем лучше сосредоточить внимание, до какого уровня дрочить литкод, насколько глубоко копать в БД и их оптимизацию и докер и тд.)
Пару лет работал фронтеденром, одновременно бекенды на ноде делал на фрилансе время от времени. Фронт надоел. Я менял место работы каждый год, и в разгар короны нашел компанию где нужен был фуллстек со знанием фронта, ноды, и го. На го всякие SSR сервисы, почти всё остальное на го, на нём и пишу в основном теперь. На литкоде никогда не сидел, в бд и их оптимизацию слишком глубоко не копал. Докер нормально копал ещё когда фронтом был. Теорию мало изучал, просто писал много кода, так и научился. На го микросервисы шлёпать много ума не надо, мне даже теперь фронт сложнее кажется, поэтому проиграл с того, что ты противопоставил фронт и программирование. Охуенное на го программирование, байтики гоняешь туда-сюда, жисончики, протобафчики, читаешь это говно из консумера реббита или кафки и обратно.
Я пытался добавить на работе в nodejs проектах. На мой вкус - удобно, а коллегам не зашло
Шляпа, конечно. Используй protobuf, из него генерируй и swagger для фронтов, и они себе код заебашут на нём тоже на изи.
Ещё в сторону gRPC посмотри, совсем от счастья задохнёшься.
Нет, но по сути - разницы в этом плне практически нет. Разве что в го это немного удобнее за счет // go: generate
Мы наоборот генерировали сварггер из го кода.
В итоге меня заебало как он иногда хуйню делал и сделали вручную.
Насчёт протобафа звучит как план, но это не апи доки всё равно.
В последнее время такой тренд, что всё пишется в протобафе, сервисы общаются по grpc, а для фронтенда поднимается grpc gateway который автоматически маппит json->protobuf. Он же и генерирует сваггер из твоих прото файлов.
>>831364
Или они долбоёбы или ты делал что-то не то. Апи без схемы - это пиздец.
> Или они долбоёбы или ты делал что-то не то. Апи без схемы - это пиздец.
Спецификацию мы то генерим, просто в микросервисах, которые используют АПИ первого мы руками пишем к нему клиент, вместо того, чтобы генерить из спецификации.
Ну то есть долбоёбы. Генерация клиента по схеме позволяет автоматически исключить человеческий фактор, поскольку в случае, если у тебя везде используется апи-метод ->foo, а в новой схеме его убрали, то после перегенерации клиента у тебя IDE сразу же покажет ошибку. То же самое с новыми полями, ошибками типов (когда вы массив вместо числа будете посылать) и всё такое прочее.
Вы просто взяли и просрали гарантии, которые даёт вам схема.
Я конечно знал, что jsеры долбоёбы, но чтоб настолько..
Помянем
Ну так заместо выкидывания паники, обрабатывай прям там - например, можешь добавить в логи ошибку эту.
В го не принято при проверке ошибки кидать паники.
Ещё конечно вариант ловить панику с помощью recover. Но рековер должен быть объявлен внутри горутины, иначе положишь всю программу.
Вощем хз, с обработкой ошибки падает точно так же, а как пользоваться recovery в моем случае я так и не врубился, если все обернуть в defer то просто ничего не запускается, код тупо не выполняется.
Во-первых, ты зачем пустую строку вместе ошибки err выбрасываешь?
Во-вторых, ты сам понимаешь как должна обрабатываться ошибка? Её игнорирование это тоже обработка.
Что за хуету я вижу на втором скрине? Почитай офиц курс про паники/рекавери и дефер.
По-моему ты прогал на каком-то говне (питоне) и теперь идёшь к нам говнокодить?
Пустую строку выкидываю потому что если распарсить не получилось то смысл мне дальше пытаться что то делать? Идет возврат, а там как раз проверка на пустую строку.
Игнорирование ошибки или нет, разницы не имеет если все падает с паникой. А на втором скрине ты видешь хуиту как раз из офф курса. Но нахуя для рекавери нужен defer я так и не врубился.
Да везде берут, просто вакансий по сравнению с жавой не так много, поэтому для новичка выгоднее брать тот язык, который даёт больше возможностей для трудоустройства.
Это другой вопрос, понятно, что навыки жависта не на 100% маппятся в навыки гошника.
А ещё на свете есть целая куча (на глаз процентов 90%) долбоёбов которые пишут такую херню, что волосы встают в жилах, не важно, джависты они или нет.
Просто делай нормально и нормально будет.
Если у тебя функция должна выйти досрочно при ошибке, то правильно возвращать nil.
Насчёт defer это добавление выражения в стек вызовов.
То есть объявив это в функции А, как только функция А завершится, вызовется твой defer. То есть ты бы мог например defer с recover, а в самой функции код с паникой, но в го на этом поведении обработка исключений/ошибок не строится. Нужно лишь, чтобы предотвращать падение программы.
В твоем случае дефер нихуя не работает, потому что само тело функции внутри дефера.
А, тогда врубился. Был уверен что программа падает в тот момент когда вызывается panic, не важно есть что то в дефере или нет.
Разработай свой коммерческий продукт, разбогатей, а потом рассылай им резюме с дикпиками
https://pastebin.com/J0UfcsvN
Потому что ты уже её объявил.
var c int // объявил в первый раз
var c = a + b // во второй раз
То есть у меня нихуя не получится и нужно оставить мечту прикоснуться к прекрасному?
Да как везде, сделай свой пет-проект и приходи с ним. Говори "да, у меня меньше опыта, зато я не долбоёб, я подготовился и всё изучил, у меня есть пет проект и дохуя мотивации". Если реально хорошо пройдёшь собес - возьмут.
гормигрейтом
Гусь
https://play.golang.org/p/xDkGWyGqRSN
func zero(xPtr int) {
xPtr = 0
}
func main() {
x := 5
zero(&x)
fmt.Println(x)
}
1) в main объявили и инициализировали переменную х со значением 5 (x:=5 т.к. тип не указывался, go присваивает тип автоматически и в данном случае это int)
2) в функцию zero передали адрес в котором хранится значение переменной x ( &x будет равен 0x765....09 )
3) функция zero принимает один аргумент и указание звёздочки у типа int означает что в функцию передается именно адрес переменной и именно с типом int? Т.к. просто по адресу переменной не понятно какой у неё тип.
4) звездочка xPtr = 0 означает что переменной значение которой находиться по адресу Xptr присвоили значение 0
подскажите плиз всё ли правильно? особенно пункт номер три интересует.
я ньюфаг еси чо, не злитесь сильно.
добра и сотни нефти!
Открыл между делом реализацию метода из стандартной либы, и чет немного удивился подходу к именованию переменных и комментариям. Почти везде переменные называются одной буквой.
Тут много чего странного писали.
пс. в коде есть небольшая опечатка, но в целом подход думаю понятен
cat1
|->proga1.go
cat2
|->proga2.go
Можно как-то подключить пространство имён proga1 в proga2?
я пытаюсь импортить типа "./proga1", но он что-то меня шлёт нахун. При этом я могу допустим на гитхаб залить, указать путь github.com/name/project/proga1 и он заимпортит, или в gopath залить проект, но не юзая эти методы можно как-то импортировать модули в таком виде?
*go mod init project
А я собственно год назад перекатился из жабы в го, охуенно себя чувствую. Жаба теперь кажется монструозной хуетой.
одной буквой обычно ресиверы метода, естественно в циклах и r - reader, w - writer, b - byte buffer
Ты бы резал по тысяче штук что ли. Не знаю, что у тебя за СУБД, но в любом случае у неё есть предел батча
Обычно используют конструкторы запросов вида squirrel для подобных вещей. Но по-моему, кстати, далеко не все инструменты (и даже тот же squirrel) поддерживают именно вставку нескольких строк за раз, благо, нечастая операция.
>>846557
Ну хз, мне кажется, истина где-то посередине должна быть. Котлин? Го2? Zig? Rust? Я хз, но у го тоже есть свои косяки и минимализм и ебанутые разработчики часто приводит к тому, что код представляет из себя лапшу из кучи вызовов системных и бизнес-функций, обработки ошибок, каналов и всего прочего, смотреть больно. Не говоря уже про то, на какие хаки в го приходится идти, чтобы обеспечить надежность (тм). Например, те же енумы.
в моем случае маловероятно, что придется добавлять более 1к записей одновременно. по 4-5 максимум
Ну так и есть. Го не замена джаве ни разу. Но джаве местами нахуй не нужно тащить за собой даже спринг бут с нетти. Тут легковесность го с его главными фичами с горутинами и каналами и самой главной фичей if err != nil {} заходит хорошо. Опять же, к примеру, реализация стека IoT железок (OPC-UA) на го есть в виде жалкого поделия студентоты, на Java же полная реализация и поддержка. И таких примеров конечно дохуя. Котлин кроме андройда вообще нахуй не нужен. Там та же ебанина кококорутины и структы. Ради этого всю джаву не обязательно тащить.
В принципе го и котлин довольно популярные у джавистов, по крайней мере на последних 2х местах работы. Как, кстати и JS-ники и в частности нодеры лютые ненавистники энтерпрайза, вполне себе на Go и на Ко, смотрели норм и сами вызывались часть сервисов написать на них.
> Котлин кроме андройда вообще нахуй не нужен.
Это ты зря, котлин - это не только корутины (да нахуй их на самом деле), это ещё и тонна удобного синтаксического сахара, решающего кучу проблем джавы без лишней боли, ту же нуллабилити, при этом без лишнего оверхеда (там логично прозрачный интероп, хотя вроде и с совсем небольшим оверхедом для гц).
Учитывая, что можно писать на котлине и на джаве одновременно в одном проекте - я не вижу причин его не использовать.
Смотри на это, как на java 20+. Шарпы сильно ушли вперед по фичам, а джава стагнировала - поэтому вместо оракла пришёл jetbrains и навернул поверх старой джаву свою новую, совместимую и содержащую все современные фичаи.
Сижу на Энтерпрайзе-джаве, миддл. Собрал несколько офферов, по сути все кроме одного практически одинаковые по деньгам и условиям - джава, ~150к денег. Но есть один на го, причём го я практически не знаю, контора крупная, поэтому берут с рынка разрабов с других языков и учат на го. Как думаете, перекатываться? По деньгам просадка не сильная, процентов на 10 меньше остальных офферов.
Особенно интересно мнение, если вы успели на джаве поработать в энтерпрайзе, но и просто гошников хочу послушать
Хз, мне кажется, что джава пока что перспективнее из-за того, что вакансий больше и работу если что найти легче.
А го, хоть и простой, до сеньора ты пару лет всё равно будешь расти, потому что специфика планировщика, гц, экосистема и прочее быстро в голову не ложатся.
Поэтому лично я бы тебе порекомендовал сначала досеньорится на джаве до 300к/сек хотя бы, а уже потом брать второй язык, просто как инструмент для каких-то конкретных задач. Тот же го для узких мест, js для фронтенда и так далее.
Иначе есть риск остаться вечным миддлом, знающим много инструментов, но ни один не на 100% и из-за этого упереться в миддловый потолок а часики то тикают
Я бы не перекатывался с просадкой. Я сам вкатился на го с джавы с маленьким почти символическим повышением(+20к). Меня просто схантили бывшие коллеги.
7 лет джавы, год на го сейчас. Алсо я почти 8 месяцев на прошлом месте работы допиливал проекты за такую же ставку за час, как на го здесь. Потом как пошли премии за го проекты. Отказался от старой работы. Из-за ебанутых хотелок и самодурства продактов. В общем-то я поэтому и свалил.
Ну да, да. Я написал 1 сервис на котлине с джавой. Согласен, что это нормальное развитие. Это не скала блять. Но мне не зашло, в то же время го удачно зашел. Кстати как раз джава сервис в разработке сейчас, ебану-ка я котлин
да нет, я сейчас собесы прохожу - насобирал офферов на около 150к, по сравнению с моей нынешней это х2, так что даже если я оффер на го возьму - улечу на х2 от текущих
Сап, гайз. Скажите, а есть какие-нибудь достойные курсы по golang? Делайте скидку на то, что я тупой QA. Заранее спасибо.
А разве есть такие? Я вот лично не ебу о таких курсах, я бы подождал и подал заявку на Ozon Go School
Сначала проходишь go tour на оф сайте (либо локально, если удобнее), затем https://stepik.org/course/54403/, парралельно пытайся написать какую-нибуть прогру с паралельностью, например - web crawler.
ProcessNews() - это воркер, который слушает канал Processor.tasks и что-то делает с тасками из него (при старте приложения запускаются N таких воркеров). Process() вызывает приватный метод processWebsites(), в котором достаются записи из бд и по определенной логике закидываются в канал Processor.tasks. У меня есть сомнения насчет того, можно ли закрывать этот канал внутри метода Process(), так как этот метод не является непосредственным писателем, а лишь вызывает писателя. Однако в этой реализации (поправьте, если я не прав) не может произойти такого, что processWebsites() будет писать в закрытый канал => паник быть не должно (только в том случае, если я буду вызывать processWebsites() еще раз отдельно от Process())
Имеет ли место быть такое решение или следует зарефакторить этот момент?
>метод не является непосредственным писателем
Это не важно, важно что эта горутина являеться писателем в этот канал, и никто больше.
А насчет зарефакторить - лучше сразу выкинуть канал пустых структур в пользу контекста.
спасибо. А имеет смысл через какой-нибудь sync.Once гарантировать то, что только одна горутина будет писать в этот канал?
Ну, для начала - sync.Once нужен скорее для ленивой инициализации какой-нибуть херни, зачастую довольно дорогой. Например, если ты создаешь какой-то дополнительный конфиг, до которого исполнение может и не дойти, и парсишь конфиг-файл не сразу же, а только когда внешнему коду нужно будет одно из полей конфига. sync.Once гарантирует, что коллбек будет вызван всего один раз, и в этом случае он точно не подходит.
> А имеет смысл гарантировать то, что только одна горутина будет писать в этот канал?
Зависит от твоей логики, возможно тебе нужна только одна пишущая и одна читающая горутина, а возможно - несколько.
Тут важно помнить, что канал - это не ресурс, который обязательно нужно закрыть. Если тебе нужен механизм для graceful shutdown - используй контекст.
А мьютексом защищать запись в канал точно не стоит, т.к. аналогичный механизм уже зашит в структуру канала.
>>852956
Чтобы обеспечить запись или чтение в канал только одному или определённому числу воркеров одновременно, советую использовать семафоры.
Вот как пример мой говнокод https://goplay.space/#c5DRpaV1vSf
Вместо канала stop, советую юзать контекст.
Спасибо за подробный ответ еще раз!
>>853194
Да семафоры - это все здорово, но в данном случае мне нужно ограничить не одновременное число воркеров, а в целом число горутин, которые будут писать в канал. Семафор в этом случае мне мало полезен, т.к речь идет про горутину, которая пишет в канал и закрывает его
С одной стороны, линтер требует, чтобы я не создавал ошибки, а использовал статические.
С другой, хочется пробрасывать наверх какой-то контекст ошибки.
Третья проблема, что текст ошибок попадает на самый верх и хочется их локализовать.
Советы/ссылки?
У нас есть свой тип ошибки, с конструктором Wrap, который включает текст предыдущей ошибки и какой-то текст.
В итоге наверху получается ошибка вида "отъебнула запись: ошибка доступа к бд: сломана сеть"
> ошибка вида "отъебнула запись: ошибка доступа к бд: сломана сеть"
Спешите видеть, гоферы изобрели стектрейсы эксепшены нинужна пок пок! хочу обрабатывать ошибки сразу куд кудах!
Что тебе не нравится? Да, по сути это стектрейс, а эксепшены и правда не нужны
> Что тебе не нравится?
Мне всё нравится. Потому что я пишу на языке программирования, а не на го
> эксепшены и правда не нужны
Про дженерики так же говорили. Пока главный обезьян не сказал, что таки нужны
Я не знаю, кто такой главный обезьян, но он неправ. Дженерики тоже не нужны и мне не нравится, что их добавят в го.
>Потому что я пишу на языке программирования, а не на го
а че тогда переживаешь? в твоей конторе решили перейти на го и тебя вот-вот выгонят на мороз?
Как раз говноедов куда легче выгнать на мороз, т.к. понабрать с улицы дибилов, которые смогут на нем наговнякать вообще не проблема
Это не конвенция, а public с большой буквы и private с маленькой. Видать, сильные вещества были.
Сука каждый go-проект - индивидальность и набор костылей и бывших коллег. Заебало ппц нахуй
Мооооод, тут насрано!!!!1111
пиздуй блять на профильные ресурсы, еще тут мне ебаных херок не хватало, аааа, сука, как же вы меня заебали, жопа горит
Ты бы ещё питон учил. Сотню раз уже писали, что пщ для тех, кто перекатывается из других языков, а не для джунов.
Абизьян, ты тут че, филиал линкедина устроил чтоли?
this:
https://2ch.hk/pr/res/1743955.html#1861495 (М)
https://2ch.hk/pr/res/1824044.html#1861498 (М)
https://2ch.hk/wrk/res/2131367.html#2135945 (М)
И да, это по ходу еще и тян https://psycheforum.ru/profile/168499-zhuchkovatmk замужем правда
Щас я пойду твою почту в соц запощу, отбивайся потом со своей реальной почтой от полчищ спермотоксикозных уже-не-школьников.
бля, обожаю сосач: минуту назад читал тред по гошке и вот уже изучаю интимную жизнь какой-то херочки
> zhuchkovatmk
> zhuchkovatmk
> по ходу еще и тян
Да ну нахуй, никогда не поверю. Скажи еще, что ты можешь назвать ее/его фамилию.
Жучкова!
а мне нравится. прочитал название и сразу видимость понятна. я тут переписывал сишарт и заебался отдельно на кейворды смотреть перед функцией.
Токсичный душнила --_-- X_X
бля, ты не из озона случайно лол?
А может это молдаванин, Жучковат М.К.
Кого оно там что умеет?
Линтеробандлер на который нужно вручную наваливать хуки билда с тестами, всё равно имея шанс отваливания при цеплянии нового файла, охуеть просто
Поставил стандартный чейн линтер-статикчек-пачкачекеровизкоропки, за мгновение подсвечивает вообще всё, что только можно
звучит как какие-то редакторо проблемы у меня в ale в виме норм работал
просто на всякий случай спрошу, а ту ли проблему ты этим линтером решаешь, не gopls ли тебе часом нужен?
>>867204
смотря в какую команду и с кем сравнивать, в среднем васьки вроде >>867206 дрочат на авито https://habr.com/ru/post/529928
Да там какое-то неведомое говно конкретно с этим чудом
https://github.com/dense-analysis/ale/issues/2339
https://github.com/dense-analysis/ale/pull/3074
https://github.com/syl20bnr/spacemacs/issues/13580
Вроде по гуглам выдаётся на первых местах, а на деле такая невнятная шляпа
2. IDEA пользуетесь? Как она в плане глючности/тормознутости для Го?
> Что интересного есть в плане работы на Го?
Девопс, операторы к куберу, хайлоад бекенд, WS сервера
> IDEA пользуетесь?
Больше половины гоферов сидят на golandе, остальные на go pls + вим/вскод/атом/етц. Первый вариант такой же по глючности как и остальные жетбейн иде, почти с таким же функционалом
> такой же по глючности как и остальные жетбейн иде
Они таки отличаются. Для джавы работает вообще чотко, дерзко, быстро. А скала плагин глючит так, что мне иногда кажется будто они его специально портят чтобы скалисты переходили на их котлин
Да нет, просто в плагин скалы не влили и десятой части того бабла, который влили в основной парсер жавы. А ещё есть прямая корреляция между сложностью языка и сложностью написания IDE к нему (посмотри на любую топовую иде для плюсов, кекус).
и у меня есть. чо делать будем?
>Что интересного есть в плане работы на Го? Понятно что язык максимум уёбищный, но, может, у вас какие-то интересны задачи/предметные области есть?
Бэкэнд как бэкэнд — из одной базы почитал, в другую посрал, результаты работы в очередь закинул — повторяешь. Разве что всё го-коммьюнити помешано на микросервисах, так что будешь ещё и девопсом зато не будешь месить абстрактные фабрики одиноких фасолин как на джаве в проектах на 15 млн строк бройлерплейта, лол.
>Или как и все колбасите обосраные CRUD'ы, только на говноязыке?
Тащемта, я бы не сказал что бэк вообще сильно различается даже между стеками.
>2. IDEA пользуетесь?
Кто работает на станционарниках — пользуются, кто любит ноутбуки — нет. Язык убер простой, и ничего кроме простого автокомплита и go to definition не нужно, поэтому хоть в nano можешь код ебашить.
>>867274
>Девопс, операторы к куберу,
Вот-вот, я про то же.
>хайлоад бекенд
Вот это в 95% хуйня кстати, на го уже даже всякое круд-ориентированное говно вроде црм пишут, это новый пхп.
>WS сервера
Ого, аж вебсокет сервера? Вот это экзотика.
Орнул.
1. Если ты всю жизнь писал круды пересев на го вряд ли что-то поменяется
2. Ну я щас прямо тащусь от флайчекерных хайлайтов. DAшный компелятор конечно чувствуется
Да это проблема вообще любой конторы, где проектов больше одного или один просто уже достаточно большой. Бывают компании и меньше сотни человек, где в одном отделе ахуенно работать в а соседнем тимлид — старый и токсичный пидорас, стек из 80-х и воняет гавной в их части офиса, лул.
В любом случае для такого есть испытательный срок, и уйти можно чуть ли не одним днём если договорится.
В го все так же нет смысла вкатываться, как в первый язык?
Не программист и не разработчик, для себя свифт изучал, но облизываюсь на работу коллег погромистов (не го,бэк)
Сейчас работаю в гейропе и надеюсь, что ситуация для вкатывальщиков получше (хуй там)
Спасибо
С другими ориентироваными на веб бэкенд языками и либами, вроде PHP, node.js и питоновской джанги. Плюсы и джаву с двадцатилетним легаси он точно не выбьет из банков и прочего кровавого эетерпрайза, а вот распилить на модные микросервисы какой-нибудь разросшийся монолит относительно молодого стартапа всегда берутся с радостью. Язык простой, с нормальной системой типов, компилируемый в нормальные бинарники который тут же кладется в еще более модные докеры с кубами, шустрый и с крутыми потоками из коробки. Чего еще нужно для языка 21 века? ну кроме дженериков и эксепшенов, азаза
Продать такое инвестору или выступить на докладе с кучей хайповых терминов очень легко, поэтому язык на хайпе, зарплаты в топе, и прямо сейчас на нем пишется огромное количество легаси, которое можно будет поддерживать ближайшие 20 лет, гоняя чаи на пенсии сеньором-помидором за 300ксек. Те же озоны сейчас набирают перспективный молодняк в свои онлайн-школы, чтобы выпустить больше рабочих лошадок, другие думаю тоже скоро подтянутся. Надо вкатываться, пока поезд не ушел и спрос на гошника намного выше предложения. Я к слову вкатился этим летом и очень доволен, остальным анонам удачи!
Анон, около 9 месяцев работаю голенг джуном, в мухосране за 30к, до этого работал эникеем, в конторе сталкивался с задачами связанные с докером, кибаной, графоной, реббитом, кликхаусом, монго, постгресс, ссдб, аэроспайк, карочи крудо дроч, еще периодически правлю баги в юайке реакта(но не особо глубоко лазил под копот). Карочи суть в чем, заебало работать за 30к, я уже здоровый лоб, и это пиздец стыдно за 400баксов батрачить. На какую зп я могу расчитатывать при переезде в ДС, или искать удаленку?
В го есть достаточно строгий стандарт кода и организации проекта, которые могут и стать плюсом, научив вкатывальщика делоть проекты на го, так и минусом, конфликтуя с практиками других языков (на одном го далеко не уедешь, параллельно нужно будет учить как минимум html, css, javascript)
С гошными концепциями ещё сложнее: даже имеющие десятки лет опыта программисты гадают, есть ли в го ооп... Если ты до этого не был знаком с основами какого-нибудь процедурного языка и основами какого-нибудь ооп (хотя бы номинального а-ля реализация в скриптовых языках) - с 99% не поймёшь "как", "что" и "к чему было" навелоспидено, с чем сопостоявляется и какие приемущиства противопоставляет другим реализациям, особенно традиционным
Заебись ты вкатился. Я в го вступил за 180 не зная го нихуя. Правда 6 лет java
>Больше половины гоферов сидят на golandе
Двачую. JetBrains практически безальтернативная. vscode - и прочие извращения - это для тех, у кого го сервисы как пет проекты или неважная хуйня.
>Разве что всё го-коммьюнити помешано на микросервисах
Поэтому go-micro прекратили развивать, потому что перерос. (привет ява) Но таки-да. у меня 15 го-сервисов из ни 6 го микро.
>С другими ориентироваными на веб бэкенд языками и либами, вроде PHP, node.js и питоновской джанги
Да ебать, вы серьезно что-ли? Каким образом гошка может с ними конкурировать? Там архитектура и абстракции, тут алгоритмы и низкоуровневщина.
и питон учил, пока не понял что вак ансий нет. Не хочу в джаву блять, не хочу в пыху, в вузе были C/C++, которые дают на уровне старшей школы нормальной. Неужели реально нужно идти в джаву?
А что не так? Я вот когда вкатывался полтора года назад, тоже думал, что в питон вкатиться просто, а затем, когда реально начал искать вакансии, находил только с требованиями опыта от 2 лет и знанием небес аллаха, или опыт не требовался, но судя по вакансии, ты реально будешь чаще заполнять бумажки и чинить принтеры, чем писать хоть строчку на питоне. Действительно нормальных вакансий для джунов (без всяких "быть выпускником топ-5 вузов", например) было очень мало. Плюнул, вкатился в жабу, подтянув за пару месяцев нужное, сижу в энтерпрайзе, программирую на XML.
А ну без опыта может быть. И то, в любом языке потребность джунов будет одинаковой и при этом они всегда на каком-нибудь проекте да нужны.
Долбоеба пусть тебе жизнь простит.
А я тебе скажу, что скорее всего ты никогда не писал на тех языках, а если и писал, то был кодером, в которого тимлид задачи кидал. И кроме как кодить, вряд ли что-то можешь.
100-200к
Я твой язык не оскорблял это во-первых
В отличии от тебя на работе не работаю это во-вторых
Какие ты там абстракции не нашёл в го это в-третьих
Он видимо так и пишет "питон" в строке поиска, кек.
Почти никак не зависит от стека если он хоть как-то востребован (за исключением 1С, лол).
Не сказал бы что не зависит, найти вакансии того же джависта за бугром гораздо проще.
И в чём же эта простота выражается?
Как я уже сказал — драматическая разница была бы если бы ты был 1с-ником, а так это будет просто флуктуация и твоё личное восприятие, которое может зависить банально от того, в каком месяце ты искал работу там и там, лол.
Больше вакансии значит больше фирм и выбор условий в виде зарплатой вилки, стека на проекте, условий переезда и отношения к тебе начальству и значит больше шансов найти подходящую тебе компанию
Жава сейчас один из самых ин-деменд языков благодаря
искусственному пропихиванию c# , особенно среди новых кадров
Лолчто, давай-ка зайдём на relocate.me и посмотрим, каких вакансий вообще и для релокации в твою любимую страну больше.
Обоссал бы тебя за то, что новичков обманываешь
>>867884
Чем язык популярнее, тем легче. Плюс, некоторые сферы более склонны к мобильности, чем другие. Субъективно, самый мобильный и распространённый - это веб. Та же удалёнка у мобилок обычно развита слабее, потому что тебе для тестов потребуются разные девайсы и если разработчик в другой стране, то ему сложно будет найти себе 10 разных телефонов для проверки всякой фигни на них.
Короч, для релокейта наиболее удачны java, js/ts (особенно фулстеки с нодой), php. C# там где-то рядом, но он более корпоративный и как будто бы менее стартаперский, так что возможностей именно для релокейта поменьше.
Конкретно для го релокейт возможен, но будет значительно сложнее, в том числе и из-за того, что го часто идёт вторым языком и поэтому ты будешь должен знать ещё что-то (обычно жаву либо пыху).
Это условия рынка в целом, а не какие-то мифические лучшие "условия для релокейта", которые ты сам себе придумал.
>>868037
Опять верно по отношению к рынку в целом, но не коррелирует с релокейтом никак.
>>868088
>Лолчто, давай-ка зайдём на relocate.me и посмотрим
Давай, открыл и вбил java и golang — 105 к 16.
Потом открыл хх и повторил — 3080 к 376.
Отличий между рынками не замечено.
Потом идём и смотрим отношение спроса к предложению (единственный адекватный способ — статистика по зарплатам).
Вилки буржуев — https://insights.stackoverflow.com/survey/2020#work-salary-and-experience-by-language
Вилки в постсовке — https://habr.com/ru/article/511700/ (прямо сейчас хабр лежит, но там графики почти 1 в 1).
И по ним мы видим одинаковую статистику — на программистов на говне спрос удовлетворён значительно слабее.
>Обоссал бы тебя за то, что новичков обманываешь
^ тебе пора мыться, воняет.
>в том числе и из-за того, что го часто идёт вторым языком и поэтому ты будешь должен знать ещё что-то
А сейчас я тебя уже буду обоссывать за то, что дуришь нюфага: с вот таким набором знаний шансов на релокейт просто нет.
Идеал это перекатываться бекендером с другим основным языком и го вторым. Сам так планирую сделать, бекендер на ноде (ts)
О, поясни плиз, зачем тебе го? Ты же на ноде в шоколаде, неужели гошка прибавляет значительно ценности для релокейта?
Да и мне представить сложно, зачем он вторым языком, если только не переписывание.
Идеал это когда ты синьйор-помидор с релевантным опытом в любой более-менее релевантной технологии, и в целом тебе похуй на язык, не испытываешь проблем с пойти и выучить, но зачастую самое важное — это опыта в предметной области.
Из 4-х мест работы я на 2 пришёл не зная основной технологии и изучив её на месте (проходил именно по общим знаниям + опыте в предметной области).
Я не он, но могу рассказать по секрету (пару раз собеседовал сам), что если ты придёшь на любой собес и скажешь что пишешь на одном языке — то сразу просто пиздец как опустишь себя в глазах собеседующих, если ты не джун.
Ну, может и в другом — с джавой и прочим энтерпрайзом не связан никак, может там это и ок.
В моём мире вообще везде — и в бэке, и в фронте, и в мобилках — везде такая конъюнктура.
Оч хочется представить себе типичный рабочий день.
Для релокейта гошка мало ценности прибавляет, вакансий не очень много. Но знание го, как мне кажется, повышает мою ценность на рыночке. Нас жсеров как говна ведь. И мне го просто нравится, в узких местах для перформанса или других профитов можно делать отдельные сервисы на нём. В одном месте, где я работал, у нас был весь бекенд на го, а на ноде был только сервер для рендеринга реакт-приложения.
Я сам по себе очень ленивый, для бекенда мне нужен был второй дополнительный язык посерьёзнее. Джаву и сишарп было лень учить, они казались какими-то раздутыми и перегруженными, хотя полсе тайпскрипта мне дотнет думаю хорошо подошёл бы. В итоге взял гошку и не пожалел.
>>868148
Согласен, но вот я часто испытываю некоторые проблемы с пойти и выучить. Работать хочется как можно меньше. В свободное время мог что-то учить только когда зелёным джуном, а за счёт работодателя иногда может быть и можно.
Ну, на самом деле vscode + gopls покрывают 95% юзкейсов - рефакторинг, го-ту-дефинишин, автокомплит они умеют. Все остальное я в повседневной работе практически не использую, по этому вполне могу работать и вскода, который, к тому же, на много легче для железа.
Эта хуйня даже умеет сама ресолвить и вставлять импорты Ебанумба
Устал разгребать мелкоскрипты
Перефразирую, если в проекте где подходит гошка используем не гошку, то что тогда?
Ну тебе ответили
Весь скриптовый зоопарк Python Ruby JS PHP
Проперженный тырпрайз JVM C#
Если скорее технически - какой-нибудь эликсир
Ты можешь взять и написать любой сервис с типами, идиом ооп, латенси-гц перформансом и мультитредом, поддерживаемым комунитей код стилем, тонной изкоропочных либ на все случаи жизни и в среднем это всё будет собираться в ~30мб бинарник из которых 10 рантайм
Нельзя.
Сейчас буквально каждый язык позиционирует себя как генерал пурпос, из которого можно слепить что угодно
Го тоже, но со своими тех характеристиками значительно выделяется на фоне остальных
>>869279
два труъ ооп языка vs оопшное имплисит лего
житовские вм и сги vs натив
конкуррент танцы с бубном vs гугловский эвент луп и зеленые потоки
отдельный штат девопсов vs 5 строчек на мультистейж докере
пердолинг пакет менежера vs импорт ссылки на гитхаб прямо к код )
Вроде бы другое против другого, но практике, чисто практически, из можно слепить что угодно, ебя мозг в разы меньше, еще и получить гору плюшек с тех. составляющей части
>Эта хуйня даже умеет сама ресолвить и вставлять импорты Ебанумба
Так это и го туллинг умеет, вроде go fmt тоже это делает. Другой вопрос в том, что руками его запускать может задалбывать, на много удобнее когда тебе это ИДЕ при сохранении вызывает.
Что с работой на го?
И сколько нужно потратить на вкат, если уже давно
умеешь программировать на си, джаве, питоне, жс/тс, чтобы получать не меньше, чем на той же джаве?
Нет такого слова "highload".
Можешь хоть в гугле поискать - хуй найдёшь.
Это рунглиш. У белых людей это называется "high performance".
И что там с работой, реально?
Есть инфа от знающего человека, что у нас в языке скоро ожидаются реальные изменения. После того, как стабилизируют ситуацию женериками, уничтожат !=nil (запрещенный во всех языках эррор хендлинг), добавят оверлап интерфейсов. Тогда и сформируется окончательный альянс С и Java в одном флаконе. Спрос поднимется и будет держаться, тырпрайз ничего не сможет сделать. Сейчас главное не бухтеть.
>/pr
>Что с работой
> тырпрайз ничего не сможет сделать
Тогда тырпрайз начнёт писать проекты на Go, в чём проблема. Вот только эксепшонов и дженериков для этого не достаточно, пока РЯЯ ПИШЕМ МАКСИМАЛЬНО EXPLICIT ЦИКЛИЧЕСКИЕ ЗАВИСИМОСТИ НЕ НУЖНЫ ПАКЕТЫ ЧЕРЕЗ ГИТХАБ А ЗАЧЕМ ВАМ ДЕБАГГЕР ФРЕЙМВОРКИ И ИНФРАСТРУКТУРА.
Что?
>(*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]
лол бля
с таким опытом 150+
я работал те же 9 месяцев джавистом - дай бог половину их твоего списка потрогал, в основном сидел кишки jvm и спринга изучал, и то охуел
перекатился на го, зп у людей с моим опытом и навыками в диапазоне 120-180к
>45к на 3 месяца
Цыгане совсем уже охуели.
Никакие интернет-курсы столько стоить не могут.
А особенно по go.
Я как-то пару раз прошёл готур (с перерывами между ними, ибо на первый раз нехуя не понял) и поговнокаживаю себе проектики
Честно говоря, не очень представляю, как можно отличиться, пися на гошке если не в худшую сторону
>что непонятного-то
в_самом_деле.jpg
Ребята, вы на такой хуйне энтерпрайз писать собрались?
Мечтатели, блядь.
Не осилил 11 слайд гайда для чайников
@
Ребята, вы на такой хуйне энтерпрайз писать собрались?
Чувак, это ты не осилил понять, что я имел в виду.
Подобная путаная и двусмысленная хуита не подходит на замену джаве.
Которая хороша именно своей простотой и недвусмысленностью.
Поэтому на ней пишут энтерпрайз, понимаешь?
Ты прикалываешься или что-то?
Работа есть, мой тимлид проводит собеседования почти каждый день, и рассказывает такое, что волосы стынут в жилах.
> рассказывает такое, что волосы стынут в жилах.
В смысле?
Тупые ебанаты приходят, или наоборот?
>>870508
Васёк, иди обратно в свой загончик для ынтырпрайзных 1С
>>870509
> Для меня не очевидно
ты вытащил от куда-то из кишков оптимизацию, которой обходят гошную типизацию, обманывают гц с аллокатором и напрямую работают с памятью
очевидно, оно тебе не нужно, и я гарантирую, оно норм работает в протобафе, а сам ты никогда руками писать такое не будешь а если будешь, получишь пизды от синьора и переделаешь
>>870605
Васьки вроде >>870502 приходят и начинают рассказывать, о своей охуенности, а как начинаешь спрашивать конкретику, то пук-среньк и мы вам перезвоним
>>870611
интырпрайзные, блять, посмотри на отечественный фаанг - все себе уже го притащили (плюсом к существующему стеку и переписывают легасню)
Пожалуйста, отговорите меня ну или просто обоссыте
Мерзкий маскот, у меня ассоциируется с ленивцем из мультика про ледниковый период. Лучше в нормальный язык вкатывайся (пикрил).
Можно разочароваться в парадигмах, подходах, идее языка, виду работ на котором его используют.
Но можно ли разочароваться в милом маскоте, с которым с каждым годом будет больше контента?
Ты самый просветленный в треде.
Этот маскот похож на кузьмича с усами из советских фильмов.
Кресты выше всяких маскотов. Крестами серьёзные люди занимаются.
Ещё в НИИ.
Ну например Авито работает на го, как минимум частично.
Ну ты же не гоняешь их по всяким RS-485 интерфейсам между коробочками, в которых всю эту хуйню нужно засунуть в пару килобайт, где половина кода работа с памятью, а половина гоняемых данных это контрольные суммы. А вот есть байтослесаря на заводах за 30000 в месяц занимаются подобной хуйней с паяльником в руках.
>очевидно, оно тебе не нужно, и я гарантирую, оно норм работает в протобафе, а сам ты никогда руками писать такое не будешь а если будешь, получишь пизды от синьора и переделаешь
А на собеседовании могут такое спросить?
Хуево.
Национал-социализм - орийский порядок
Дописываю свой первый минипроектик и точно буду использовать в будущем
Для ряда задач Го действительно удобнее всего, что было до него. А в чем суть твоего проекта?
Не читается же нихуя, говно ёбаное, ну.
Чего стоило там двоеточие поставить, как у всех нормальных людей?
Чего стоило сделать как в нормальных языках, где префиксом и без уебанских паскалевских двоеточий?
Привыкаешь примерно за день, и читается нормально. Но если паралельно пишешь на языке в котором типы - префиксы, тогда да, адово неудобно.
А типы с маленькой буквы, но методы - с большой?
Это кем, блядь, надо быть вообще, чтобы такое придумать?
Так типы как и методы - если с большой буквы - экспортятся, если нет - значит нет.
Проект как раз уныленькое утилитное говно, но прощупать го и обкончаться от предельной практичности успел
Ну, сахарок и гибкость - стоят нехуёвых ресурсов, как правило.
Закон сохранения никто не отменял.
А вот постфиксные типы без разделителей - это пидарство, конечно.
Декораторов, итераторов, контекстных менеджеров, реализации всего и вся через протоколы, которые достаточно реализовать в своем классе и оно будет работать. Только познакомился с синтаксисом и базовыми структурами и пилю бложик для практики. Ощущение, как будто от сишки, когда в универе лабы писал. Хотя может ещё не привык.
Гибкости скриптоты при всём желании в статике никак не сделать. На то она и статика.
>Декораторов
Никто тебе не запрещает обернуть одну функцию в другую. В го функции это тоже значения, как и в питоне.
>итераторов
Реализуется при помощи дополнительной горутины и канала, тоже изи.
>контекстных менеджеров
defer решает 99% задач контекстного менеджера.
>реализации всего и вся через протоколы, которые достаточно реализовать в своем классе и оно будет работать.
Через интерфейсы это реализовывать на много круче, т.к. все явное.
Спрашивай свои ответы, если что.
> Никто тебе не запрещает обернуть одну функцию в другую
Так ведь весь прикол в синтаксисе @decorator, который в Go в лучшем случае через кодогенерацию, которая зло.
мимо
>Никто тебе не запрещает обернуть одну функцию в другую. В го функции это тоже значения, как и в питоне.
Так суть в сахарчке, который делает код изящнее, а не прописывание через аргументы
>Реализуется при помощи дополнительной горутины и канала, тоже изи.
Я не совсем про это, в пистоне в классе достаточно реализовать два метода и все, с твоим объектом может работать все что угодно, что поддерживает этот протокол. а тут нужно ебаться с типами, мне очень не хватает темплейтов
>defer решает 99% задач контекстного менеджера.
п. 1, вместо красивого разделения кода на вход и выход получаем мешанину без разделения логики
>Через интерфейсы это реализовывать на много круче, т.к. все явное.
И это превращается с еблю с типами, что без темплейтов вызывает боль
Ну там своя атмосфера
Есть пару десятков тысяч файлов
В каждом файле есть по методате, которую нужно спарсить
Есть башскрипт, который генерит самые обычные хтмлы с тейблами и заполняется вручную (даже путь к файлнейму, поскольку он может меняться)
Есть страница, выдающая рандомный файл и которая должна иметь доступ к данным, заполненным в хтмл таблице, и метаданным, спаршенным из этого файла
Нужно перепроверять хотя бы достоверность линка к файлу из тейбла, как-то выжимать оттуда информацию (хтмл файликов с тейблами не тысячи, но может быть под несколько соток), парсить метадату из файликов и сделать страницу с рандом файлами рабочей
Использовать вебсервер с какой-то логикой и тем более базу данных принципиально нельзя (супер простой вс сервер я всё-таки всунул в утилиту, но нужно, чтобы всё могло работать и без него)
Утилита не должна требовать чего бы то ни было установленного, тем более нодмодулей, и не сосать по перформансу, насколько это возможно с фсшным и\о и говнокодным написанием, поэтому выбрал го
Короче страдаю хуйнёй но нравится
Так это только сахар, а сам паттерн все равно же реализуем.
>Зачем тебе итераторы когда вопрос прохода по массивам
Итератор это не только массивы, это еще и питоновские генераторы
Генераторы в питоне - это скрытые потоки, магия.
А го специально сделан максимально простым.
>>873875
Всего этого там нет специально, как я понял из вводной главы The Go Programming Language. И дженериков тоже.
Т.е. simplicity = высшая добродетель.
Звучит заманчиво, а как оно на самом деле - посмотрим.
В каком плане неявно? Есть реализация интерфейса, все через него работает и все описано
> А разве из горутины и канала нельзя сделать что-то типа генератора?
оно не очень честно будет, честнее сделать явно что-то вроде
for val, err := fn(); err != nil { ... }
но питонисты, обмазанные сахаром, не знают как работает их сахар
Генератор выдаёт значение тогда, когда его попросят.
Почему я и написал про горутину + канал.
Я то уж было надеялся, что ты про запоминаемое между вызовами состояние скажешь, а ты вообще фигню какую-то ляпнул не подумав
Нет, это ты сейчас ляпнул фигню.
А то, что я написал - это определяющее свойство, остальное - вторично.
Странные у тебя фантазии.
Кого тут только не встретишь.
Это не ты рядом в мвп-треде копротивляешься, зелёный?
>генераторы
Специально для питоноблядков:
https://www.reddit.com/r/golang/comments/c1ylk3/is_there_any_way_to_replicate_pythons_yield_in/
>>874520
И ты тоже почитай, когда закончишь уринировать на своё отражение в зеркале.
>>874533
а вы правда чтоли не понимаете, ни что такое генераторы? ни своего мнения нет?
ну как сполоснетесь, приходите маняврировать чем это не генератор https://play.golang.org/p/GeOiqNiZH5M
Чувачок, оба коммента, на которые ты сослался - мои.
Генератор - это yield, вот что такое генератор.
В одной функции может быть много yield.
А то, что у тебя - это хуита.
Возвращайся с формальным определением и кейсами использования
А пока моя сахарная елда попользует твой рот
Проснись, ты обосрался дружок.
Если ты не понимаешь, что есть генераторы в питоне, можешь пройти в питон тред, и отсосать спросить там у первого попавшегося джуниора.
Скажи им, что ты сделал генераторы на го с прерыванием вычислений через выбрасывание ошибок, лол.
И тебя обоссут всем тредом, с ног до головы, как ты любишь.
>Генератор - это yield, вот что такое генератор.
>В одной функции может быть много yield.
Перетолстил
как раскладывать файлики по папочкам можешь тут посмотреть https://github.com/golang-standards/project-layout
в остальном - читай книжки, как объектно-ориентированное программирование работает, потом читай опен-сорсные исходники, потом пиши сам и двигаясь так по кругу накопишь этот самый опыт
https://docs.python.org/3/library/exceptions.html#StopIteration
дружок-петушок, не надоело еще в своем говне трепыхаться, не наелся еще? может принести тебе ложку по-больше?
ультимативно обоссан
Потому что у создателя говноланга единственное правильное мнение на любой вопрос.
Ладно, согласен, про ошибку было лишнее.
Сам так делаю иногда, лол.
Например, на джаве, с CompletableFuture.
Но, тем не менее, то, что у тебя - это не генератор.
Это - похоже на генератор.
Генераторы - это потоки.
yield - это передача управления другому потоку.
Поэтому, генераторы - это горутины + каналы.
Я с го познакомился буквально пару дней назад.
Но, мне кажется, что такой подход даже интереснее, чем питоновские генераторы.
> Генераторы - это потоки.
ты с питоном-то не разобрался, как это работает, куда уж тебе до горутин с каналами, болезный
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 (М) братишки заждались, а здесь не надо демонстрировать глубину своей тупости, в это ни весело и никакой ценности не несет
Генераторы - это сопрограммы. Концептуально это можно назвать потоками. Горутины - тоже не потоки, в конце концов.
>я по полгода себе никого в команду найти не могу
Потому, что ты токсичный закомплексованный уебан?
Явности нужно в меру, иначе это заставляет разработчика писать кучу лишнего кода. Создатели сами поняли как обосрались и решили завезти темплейты в 2.0, как пример.
Те же конструкторы это тоже просто функция, которую можно было бы и в методы структуры добавить, вообще ничего не изменится, кроме уродского способа создать класс с дефолтными параметрами.
Ты сейчас с попыток нормального объяснения просто оскорблениями начал кидаться. Авторы уже сами поняли какое ГОвно высрали. Надеюсь, что вторая версия все исправит.
Керниган в 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.
Забыл добавить - и это охуенно.
Думаю, что в эту тему просто пришло много новых людей, без сишного бекграунда - джаваёбы, питонисты, рубисты (прости г-споди), т.е. люди, по-сути, программировать не особо умеющие. И язык теперь будет под них подстраиваться.
>нет дженериков в типизированном языке
>охуенно
Пиздец как радовались плюсовики, когда узнали, что функцию на каждый тип копировать нужно
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
Они сделали приоритетными скорость работы и простоту.
Т.к. закон сохранения никто не отменял, это означает несколько больший объём (кода).
Также, например, можешь поинтересоваться, почему го генерит такие большие бинарники.
плюсую, но вот это печалит
> И язык теперь будет под них подстраиваться
гошка из простой и понятной скатится до состояния нынешнего питухона, когда каждый альтернативно мыслящий будет иметь голос
да, питон когда-то был хорош
>>875255
не, с дженериками ребята прогнулись и в каком-то виде их затащат, в этом ли или другом - одному Пайку известно
> Те же конструкторы это тоже просто функция, которую можно было бы и в методы структуры добавить, вообще ничего не изменится
Так если нет разницы, зачем это реализовывать и использовать? Просто по тому что в том языке, к которому ты привык - так сделано? А смысл тогда новый язык создавать, а не дополнять существующий?
Да, но иногда удобнее принимать unsafe.Pointer или reflect.Value, которые так же можно получить из значения любого типа
А интерфейс указывает, что принимать можно только указатели? С ними еще понятно, потому что это просто ссылка в памяти, но не объекты же. Спокойно же можно создать array с разными типами через это.
Я к тому, что в сишке при указании войда ты можешь работать только с указателями. В го можно засунуть любой тип, это и странно, учитывая, что оно тут используется везде и неизвестно, ожидает на прием функция. Type safety проебывается.
Спасибо за ссылку
>А интерфейс указывает, что принимать можно только указатели?
Нет, любое значение можно превратить в интерфейс. Но при этом внутри интерфейсного значения лежит поинтер на тип и поинтер на оригинальное значение. Да и интерфейсное значение - к тому же, может быть nil, т.е. интерфейс - это тоже, своего рода, поинтер.
>>875581
> Type safety проебывается.
Так это и есть назначение пустого интерфейса.
> Type safety проебывается.
Type safety в том, что без явного преобразования к реальному типу ты ничего с пустым интерфейсом не сделаешь.
Она и есть. Поэтому в пщ и набежали толпы восторженных петухонщиков и жопаскриптеров.
Я как то не особо верю, что такая вещь работает быстрее, чем потенциальные дженерики
чем обычная errors.Is/As не нравится? ну и можешь выкидывать свой тип ошибки в котором стактрейс уже лежит.
>для каждого куска скорее всего найдеться всего несколько совпадений по проекту
где-то я читал что рекомендуется каждую ошибку делать с уникальным сообщением как раз для этого
>утилиту
консольную утилиту или какую-то либу которая делает то что в принципе можно сделать без нее и довольно удобно? не понял короче.
Я сам из питона набежал, но разочарован этим, на прошлом проекте почувствовал, что нужно обмазаться типами и статикой. А тут то же самое в глотку засовывают
Конечным разработчикам они и не нужны
но с ними может навелосипедят что-нить типо джавового hibernate или аля питонячий "functional-go" и прочего
>питонячий
>functional
Как можно всерьёз говорить о ФП в языке, где лямбды могут быть только однострочные, лол?
Это даже не смешно.
Выходит, и хачкиль не функциональный, ведь там любые функции/лямбды должны быть в одно выражение.
Ты не знаешь, может в опенсорс выкладывали?
>>875873
>чем обычная errors.Is/As не нравится? ну и можешь выкидывать свой тип ошибки в котором стактрейс уже лежит.
У меня немного другое видение этого.
>консольную утилиту или какую-то либу которая делает то что в принципе можно сделать без нее и довольно удобно? не понял короче.
errors.Is/As решает другую проблему - обработку ошибок в рантайме. Я же хочу сделать статический анализатор, которому буду скармливать строку ошибки, которую я достал из логов, и исходники. На выходе я хочу получить строки, на которых эта ошибка дополнялась через fmt.Errorf("bla-bla: %w") (или другими способами), чтобы на выходе получить нечто, похожее на стектрейс.
> где-то я читал что рекомендуется каждую ошибку делать с уникальным сообщением как раз для этого
Это разумная рекомендация, но я не уверен, что ее придерживаться в 100% случаев, по этому думаю как можно хендлить более неприятную ситуацию. По крайней мере я сам пару дней назад видел на работе 3 ошибки с одинаковой стрингой, но они все в разные бинари по итогу попадают.
>Я же хочу сделать ...
Если от такого может быть реальный профит - это уже давно должно быть написано, и надо просто поискать.
Но, у меня есть сомнения, что будет толк в общем случае.
Кстати, если такое писать, то лучше делать это на перле.
https://play.golang.org/p/mMas2Sldlju
https://play.golang.org/p/h1qwq9e5Qrm
Это в любой книжке по пщ есть? А то в туре этого не увидел.
Хуячь сразу в слайс байтов исходную строку (у тебя же там не юникод?)
Вместо выходной строки - тоже слайс байтов.
При желании - можно захуярить в 2 прохода - на первом посчитать длину резульата, создать массив байтов, на 2-м - заполнить его.
Найденные на 1-м проходе токены (буква+число или набор букв) можно сохранить в массиве слайсов исходного массива, чтобы не искать заново.
Вот, с байтовыми слайсами:
https://play.golang.org/p/V3_PFfxNk7L
>>876250
Я думал, там число в условии, а там 1 цифра, т.е. всё гораздо проще.
А чтобы со строками (unicode) работало - надо просто заменить слово byte на rune.
Это копия, сохраненная 24 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.