Двач.hk не отвечает.
Вы видите копию треда, сохраненную 24 марта 2023 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Cамого МУЖЕСТВЕННОГО в мире языка Go тред №21 /go/ Go или Golang — компилируемый язык программирова 2510725 В конец треда | Веб
Cамого МУЖЕСТВЕННОГО в мире языка Go тред №21 /go/

Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.

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

Растобляди завидуют, сектантская запарта не переваривает.

С чего начать:
- В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)
- Читаем документацию прямо по порядку (пункт "Learning Go"): https://golang.org/doc/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)

Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/
- Книги из списка https://github.com/dariubs/GoBooks

Полезные ресурсы:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/
- Смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw

Обновляемый список с пакетами: https://github.com/avelino/awesome-go

Небольшой канал треда: t.me/golang2ch и даже живой

Предыдущий тред умирает здесь: >>1986204
2 2510728
3 2512269
>>510725 (OP)

>Небольшой канал треда: t.me/golang2ch и даже живой


Он слишком живой. Если его читать (тем более участвовать), кто там куда съездил, кто чё купил, кто какую хуйню сделал - на работу времени не останется.
4 2512273
Ну чо, гоферы, завезли вам уже эксепшены или пока ещё нет?
5 2512285
>>512273
Эксепшены антипродуктивны, смотри тридцатилетний срач в джаве насчет их checked exception
6 2512290
>>512285
В итоге unchecked победили и используются повсеместно, а легаси с checked ловят и оборачивают в unchecked. В других языках, где есть эксепшены, нет unchecked вообще.
7 2513158
>>510725 (OP)
Господа двачеры-прогроммачеры. Я новичок в Go, так что просьба не кидаться говном

Задача следующая: я пишу скрипт, который будет записывать в файл ответы ссылки URL 404, 400, 200, 306 и т.д.

Пытаюсь это решить через file.WriteString("\nCodeResponse{status=%d}", code)

Но получаю предупреждение too many arguments in call to file.WriteString. Собственно где я мудак? Я знаю, что везде
8 2513165
>>513158
WriteString() принимает ровно один аргумент - строку, форматировать он не умеет, делай это через fmt.Sprintf().
9 2513181
>>513165
пасиба
10 2514094
Парни, как вообще можно попасть на позицию джуна с го, если всем нужен опыт работы, а вакансий на позицию стажера без опыта в том же спб нема. Пытался найти удаленку, но много кто посылал куда подальше, ибо я из рф... странная тема.

Всем пис.
11 2514154
>>514094
Кто ищет волшебника - получает сказочника, вот и все
12 2514226
>>514094
Через другие языки. То же касается и ноды. Работаешь 1-2 года на пайтоне/пхп/джаве/шарпе, параллельно качаешь го, после года работы параллельно работе ищешь работу на го. Либо тех. вышку имеешь и вкатываешься легчайше в любой стек, хоть в хаскель.
13 2514397
Почему в этом вашем блядском го нет оператора возведения в степень? Пиздец нахуй удобный высокоуровневный язык, ссанина пучеглазая.
14 2514399
>>514397
напиши ёпт

мимо не гошник
15 2514400
>>514399
Как я "напишу" тебе новый оператор в языке, в котором нельзя создавать новые операторы, еблан ты тупорылый? Говна поешь, макака безмозглая.
16 2514404
>>514400
Это троллинг тупостью или тупость?
17 2514438
>>510725 (OP)
Короче, есть этот ваш пакаж, назовем его api, в нем есть файл, представим, что называется он testoviykal.go.
Вопрос: можно ли внутри текущего (api) пакажа заалиасить конкретно этот файл?
18 2514439
>>514438
а-ля import test "api/testoviykal"
19 2514575
>>514438
на отдельные файлы ссылаться нельзя, гошка работает с пакетами, а пакет - это все файлики в папке.
хз что ты хочешь вообще. либо уноси файл в отдельный пакет, либо наворачивай все функции из файла как методы на структе, либо юзай билд теги/суффиксы платформы, чтобы при билде выбрать файл.
20 2514785
Можно ли на го писать кроссплатформенные десктопные приложения?
21 2514821
>>514785
Можно, но инфраструктура сырая.
22 2514861
>>514785
Го это не про десктоп от слова совсем. Забудь про гуи на го.
23 2515599
>>514785
можно, fyne или wails тебе в помощь
24 2515732
Хочу написать на Go скрипт, который будет до определённого момента грузить ОЗУ, например на +50%. не более. Как это можно сделать, в сторону какого пакета смотреть?
25 2515832
>>514575
Дегенератский язык, пиздец просто
26 2516355
>>515832
я больше охуеваю от того как в жс файлики по одному импортят, когда во фронт коммичу
27 2516357
>>515732
GOMEMLIMIT поставь и сри байтами?
image.png49 Кб, 494x395
28 2517021
Какой подход более идеоматичен при работе с коллекциями в го? Бросать еррор когда коллекция пустая, либо же сделать отдельный метод IsEmpty, как в жабе?
29 2517027
30 2517065
>>510725 (OP)
Что вообще от джуна-стажера го щас требуют? На текущей работе сетевик, по фану написал CRM для внутреннего пользования. JWT аутентификация, рест апи, асинхронные задачи типа отправки на печать, почты, етц. Сойдет за пет прожект чтобы к резюме прикладывать?
Хуй знает че еще такого надо уметь, может архитектуру/паттерны надрочить, или с grpc че нить сделать
31 2517172
Перекатываюсь к вам из пистона.
Почему не сделали конструкторы для классов структур?
Почему не сделали встроенный set?

Язык на первый взгляд кажется очень простой и прямой палкой как си, но при это не дает тебе нихуя сделать
32 2517179
>>517172

> Почему не сделали конструкторы для классов структур?


Потому что Go - не объектно-ориентированный язык. а что-то вроде высокоуровневой сишки.

> Почему не сделали встроенный set?


До определённого времени не было дженериков, и предлагалось использовать map. А теперь хуй кто будет вводить кейворд set, сразу всё легаси перестанет компилироваться, слишком уж популярное имя для идентификаторов.
33 2517184
>>517179

>а что-то вроде высокоуровневой сишки


Ну ниудобна жи! С комфортом бизнес-логику не поделать так же как на пистоне или жабе. Есть примеры классических приложений (не инструментов) с открытым кодом? Хотя бы что-то вроде магазина или борды.
34 2517204
>>517184

> С комфортом бизнес-логику не поделать так же как на пистоне или жабе


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

> Хотя бы что-то вроде магазина или борды


Ими весь гитхаб завален. Например, https://github.com/DexterHaslem/dexchan
35 2517319
>>517172
Пару лет назад задался тем же вопросом по поводу сетов, тоже перекатывался с питона.
Сейчас уже не понимаю, зачем нужен условный сет/хип/кью в стд либе, при желании реализуется за 5 мин, а нужно раз в месяц.
36 2517342
>>517319

>нужно раз в месяц


Я литкод ежедневно нарешиваю. Мне нужно.
37 2517512
Доброго ранку. Писал на сишечке и плюсах, вот если я чичас буду учить го, то на стажера возьмут? Индекс вката в стажеры какой сейчас?
38 2517597
Как в 2022 делать go run программа.go если программа из кучи модулей?
Нашел на гитхабе кучку простых примеров, но ничего не запускается.
Я понимаю, что есть современный способ, когда через go mod init создаешь файлики, go mod get качаешь все что нужно, но

можно без этой ебли?

Я просто хочу пару примеров погонять, а не устраиваться в Wildberries.
39 2517614
>>517597
Вот прочитал про GO111MODULE=off
Ну ладно, делаю это. Немного лучше поведение. Но пакетов все равно нет.

как тогда глобально поставить некоторые пакеты?
40 2517615
>>517597

Можно использовать gopath. Но вообще go-модули - это и есть вариант без ебли + это единственный верный способ организации программ на го. Подход с gopath сейчас используется только в легаси
41 2517616
>>517614
В чем проблема проинициализировать модуль и просто устанавливать зависимости, которые будут отображаться в файлике списком? В чем ебля-то?
42 2517620
>>517614
Ладна, спасибо за нихуя.
вот что нужно делать :

export GO111MODULE=auto
go get github.com/google/бырбыр/мырмыр
go run хуйтика.go
43 2517621
>>517616
это примеры из книжки за 2018.
Там все такое маленькое и простое.
44 2517714
>>517319

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


То есть мне надо из проекта в проект таскать свой пакет с коллекциями, как диды которые с микрухой ебуться?
45 2517728
>>517714
в рил ворлд проектах это не нужно. ну ладно раз в 3 месяца будет у вас новый сервис заводиться и с шансом 90% там даже очередь не нужна будет, а если ты будешь 2N в N оптимизировать затаскивая недефолтные коллекции тебя отхуесосят на ревью
46 2517737
>>517728

>а если ты будешь 2N в N оптимизировать затаскивая недефолтные коллекции тебя отхуесосят на ревью


Так разве го не для этого нужен, что бы байты быстро педалить?
47 2517743
>>517714
В Go есть поддержка сторонних либ, ничего своего таскать не надо. Устанавливаешь готовую либу, где реализованы десятки коллекций на все случаи жизни, и можешь писать почти как на нормальном языке.
48 2517799
>>517342
Так я тоже, лол. Но литкод это не сфера применения гошки.
Это наша проблема, что мы решаем литкод на гошке.
49 2517805
Каково это, быть Говнокодером?
50 2517845
>>517805
Быть говнокодером? Не зря эти слова так похожи.
51 2518830
Хочу соорудить в максимально ненапряжном стиле сетевой эмулятор устройств.
Как это сделать на Go? Go я выбираю исключительно ради легковесности горутин и логики эмуляции.

Изображать я буду обмен по TCP. Но не неплохо бы еще SNMP.

Может быть docker-драйвер слабать?
Или TAP-устройство?

Какие библиотеки или полуготовые проекты посмотреть?

Я смотреть google gvisor - оче сложно для меня и ничего не готово.
Я смотрел google packet - там нет tcp-стека полностью. Можно только пассивно наблюдать за трафиковм
52 2519292
Вкатился в этот ваш го.
Расскажите как вы живете без перегрузки методов?
про хуевую обработку ошибок и только недавно добавленные дженерики промолчу...
53 2519295
>>519292
Пишем типы в названиях функций.
54 2519297
>>519292
Дженерики лучше чем в жабе, кстати.
55 2519300
>>519292

>только недавно добавленные дженерики


Так вроде сам езыг только недавно добавился, не?
56 2519896
>>519292
про этот пережиток плюсов раза два вспоминал за 3 года, несмотря на это всеми силами стараюсь не отчаиваться
57 2521066
Соратники, а как вы свои микросервисы в докер заворачиваете? Билдите внутри контейнера или же локально у себя сбилдили и закидываете в контейнер только лишь бинарник? с 1 стороны можно прямо маленькие образы делать( но у меня какая-то хуйня
exec /app/main: exec format error), подозреваю надо билдить как-то по хитрому, это при попытке закинуть в контейнер бинарник сбилженный под макос(юникс)
58 2521069
>>521066
Билдить, очевидно, нужно в докере. Но всем лень.
Желательно использовать multistage build.
59 2521071
>>513158

>скрипт


хуипт, долбоёбина
60 2521072
>>521066
Ты случайно не на макбуке m1 собрал образ и пошел на интеле запускать?
изображение.png19 Кб, 428x385
61 2521106

> В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)



я конечно знаю ангельский, но немного НЕПРИЯТНА
62 2521275
>>521072
Все на интеле, ну в будущем возможно и до этого дойдет, все таки мой мак - ветеран

>>521069
Место много занимает если билдить в докере, у меня 300-400 мб контейнер весит
63 2521276
>>521106
Охуеть, даже на польском есть версия, хотя в Польше вакансии не для сильных мидлов-сениоров просто нет. Зачем они делали ее я не знаю
капчю из Польски
64 2521278
>>521275
ты не прочитал до слов multistage build.
66 2521288
>>521281
блядь.
где еще можно найти документацию на docker кроме как на сайте docker.com ?
https://docs.docker.com/build/building/multi-stage/

Ей богу, как дети..
67 2521436
>>510725 (OP)
Почему у вас считается нормальным импорт модулей для сайд эффектов? Читаю доку по gRPC, что бы подключить сжатие на стороне сервера нужно импортировать gzip и никуда не указавать его дальше. Хотя бы при инициализации сервера через опции можно было бы сделать.
68 2521632
>>521436
мы все против такого
изображение.png12 Кб, 423x145
69 2522305
Почему функция с дженериком any не хочет возвращать строку? да она в принципе нихуя не хочет возвращать
Any это же алиас для пустого интерфейса
70 2522331
>>522305
Ты должен вернуть тот же тип что будет указан в дженерике, но ты возвращаешь string. Прдеставь что у тебя тип дженерика будет int как туда можно впихнуть в строку?
any означает что тип дженерика может быть любым, а не то что он возвращает любой тип
71 2522339
>>522331
понял
но не понял как мне к примеру стринг привести к типу Т
изображение.png37 Кб, 702x347
72 2522343
>>522339
В твоем примере никак, а так тебе нужно сделать интерфейс в котором есть метод который возвращает string
Вот хорошая статья на эту тему https://habr.com/ru/company/karuna/blog/552944/
73 2522541
>>514226
А как вышка помогает при устройстве?
74 2522586
>>522541
забей это вышкошиз
75 2522599
>>522586
вышка вообще хоть зачем то нужна?
76 2522602
>>522599
для релокейта за границу наверн
77 2523418
>>510725 (OP)
Как на Go написать identity function? Это функция, которая возвращает свой аргумент. При чем аргументом может быть любой тип, в том числе функция. На JS это выглядит так

const identity = (x) => x;

Типизация Go требует указания типов аргумента и возвращаемого значения. Есть какие то хаки чтобы это обойти, чтобы функция принимала аргумент любого типа и возвращала его?
79 2523442
>>523430
Спасибо за пример. Только не понял зачем 2 функции, identity и identity_interface? Как это называется T, чтобы почитать? Гуглится плохо. Я пока нуб в Go, хотел только понять как можно добиться параметрического полиморфизма.
80 2523444
>>523442
Одна функция через дженерики, другая через интерфейс, T в квадратных скобках это дженерик
81 2523445
>>523430
И identity и identity_interface могут принимать например функцию square. Так зачем их две, в чем разница?
82 2523446
>>523444
Понял. Спасибо еще раз!
83 2523489
>>523430
Вариант с интерфейсом более верный, потому что дженерик порождает разные функции на каждый тип
84 2523534
Господа двачеры-прогроммачеры, need help.

Короче, изучаю этот ваш Goи столкнулся с одной проблемой

Создал две структуры и две функции. Соответственно функцию main и другую, функцию, которая выполняет запись в строку, при выполнении определённых действий.

В функции main задал ключи-значения структурам.

Собственно две проблемы:
1) Вне функции main я не могу использовать WriteStting(), гугул говорит, что это из-за того, что WriteString() работает в функции, которая имеет права записи. Как дать права записи второй функции?
2) Если нельзя сделать первое, то как мне передать из одной локальной переменной значение в переменную, которая находится в другой функции?
85 2523541
>>510725 (OP)
Где почитать про ебучую T? Что это такое вообще? Не гуглится в доках.
86 2523542
>>523489
Лучше по производительности? Где такие нюансы можно изучить? Читать доки или есть какие то другие ресурсы?
87 2523544
>>523534
Гадалок в треде нет. Код выложи в Playground.
88 2523727
>>523541
ты про дженерики как я понял
90 2523759
>>523727

>ты про дженерики как я понял


Ну похоже это про дженерики. Только почему нигде нет описание что это есть? Это тип данных или что это?
91 2523766
>>523430
Что за тип T? Уже пальцы стер пытаясь нагуглить что он значит.
92 2523772
>>523766
Базовый тип, от которого наследуются все остальные.
93 2523821
>>523772

>Базовый тип, от которого наследуются все остальные.


Где нибудь об этом пишут? Дай пожалуйста ссылку, а то выебся искать. Не гуглится T, не гуглится базовый тип. Где ты об этом читал?
94 2523839
>>523821
>>523759
"дженерики golang" 1 ссылка в гугле
95 2523910
>>517172

> Почему не сделали конструкторы


чтобы не возникало вопросов как из конструктора вернуть ошибку
96 2523914
>>523910
Надо запилить конструкторы. Тогда разрабы Go будут вынуждены добавить исключения.
97 2524077
>>523772
доброе утро, сэры
98 2524211
>>510725 (OP)
Аноны, опишите свою работу. Чем вы конкретно занимаетесь на работе (понятным языком). С какими проблемами сталкиваетесь? И КАКИЕ ТЕХНОЛОГИИ ВЫ ПОСТОЯННО ИСПОЛЬЗУЕТЕ?
image.png120 Кб, 600x360
99 2524251
>>524211
жсономешалка мешает жсон
100 2524293
>>523772

>Базовый тип, от которого наследуются все остальные


>>523839

>"дженерики golang" 1 ссылка в гугле


По этой ссылке про T почти ничего нет. Ни слова про то, что это некий базовый тип. Что за ебанутый язык, почему нет внятного полного описания этой хуйни?
101 2524298
>>524251
Нубля, онон. Расскажи за свою профу на местах? Я могу конечно ютуб открыть и глянуть там прогеров, но меня интересуют такие же двачеры.
102 2524301
>>524293
Это просто букова, буковы любые можно ставить, хоть T, хоть K, хоть Ѫ, все работать будет
103 2524303
>>524293
да просто вопрос уровня "где можно прочитать что такое x в математике?"
T это тупа принятое название для первого/единственного типа-параметра. пост про "базовый тип" это шутка про джаву (я надеюсь). если тебе нужно внятное описание, то можешь спек читать https://go.dev/ref/spec#Type_parameter_declarations всё остальное, включая сами сорсы гошки, это просто пережеванный разными людьми и выплюнутый в определенной физической форме спек
104 2524305
>>524303
Ну наконец внятный ответ. Только я не догнал, как буквенный идентификатор выступает в качестве типа возвращаемого значения? Спасибо
105 2524310
>>524305
в гошке это и так можно было сделать, например объявить произвольный алиас для типа type T = int и возвращать T вместо int.
чисто синтактически типы-параметры примерно похоже себя ведут. если на пальцах об асфальт, то можешь это рассматривать как алиас в скоупе функции, но конкретный тип, который алиасится, определяется при инстанциации.
image.png26 Кб, 645x333
106 2524311
>>524310
я к тому, что вот это всё ведет себя одинаково
107 2524319
>>524310

>type T = int


Можно объявлять пользовательские типы? Так type all = any можно?
108 2524323
>>524319

>Можно объявлять пользовательские типы?


да, в го можно объявлять пользовательские типы. это выгодно отличает го от языков, где это нельзя делать

>Так type all = any можно


да
109 2524348
>>524323
Отлично, вот уже Go не кажется таким уж плохим. Спасибо.
110 2524351
>>524348
Хуйня, а не язык. Даже на православном JS можно ML пилить, а это какое-то кустарное поделие для узких задач.
111 2524356
>>524351

>можно ML пилить


ML - это язык программирования. Родоначальник целого семейства языков и множества фич. Python своим синтаксисом обязан языку ML. Поэтому пиши Machine Learning.

>Даже на православном JS можно ML пилить


И как это вообще относится к языку? Можно подумать JS поддерживает machine learning из stdlib. Запилят либы для Go и на нем можно будет юзать machine learning.

>это какое-то кустарное поделие для узких задач


Не кустарнее JS и PHP, но да, для узких задач, сети и конкурентность.
112 2524359
>>524298
>>524211

>Чем вы конкретно занимаетесь на работе (понятным языком)


микросервисы... ну грубо говоря есть два вида задач - технические и продуктовые.
продуктовые это уровня
- есть шина данных (например какой-то топик в kafka или NATS) и сервис, который умеет отправлять пуши пользователям. нужно запилить сервис, который будет слушать шину и при получении определенных событий ходить в rpc ручку сервиса пушей, чтобы отправить эти пуши. а еще нужно запилить дедупликацию с БД/редисом, чтобы одинаковый пуш дважды не отправить. плюс возможно после получения события надо сначала идти в какие-то другие сервисы, чтобы взять нужную инфу для пуша.
- или нужно начать отдавать какие-то данные на фронт, т.к. мы хотим пользователям больше инфы показывать, например граф движения посылки. для этого нужно в сервис с апишкой допилить поход в сервис статусов за этой инфой.
- или так как у нас SSR, то всякие правки текстов тоже на бэкендеров падают.
и технические задачи - это уровня оптимизировать запрос в БД или запилить новую ручку для Х, которая возвращает меньше инфы, но работает быстрее, дергает более легкие ручки других сервисов или вообще не дергает, и переключить потребителей на неё, чтобы подготовиться к росту нагрузки на следующие полгода.
вместе со этим нужно мониторить и дежурить по сервисам своей команды.

>С какими проблемами сталкиваетесь?


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

>И КАКИЕ ТЕХНОЛОГИИ ВЫ ПОСТОЯННО ИСПОЛЬЗУЕТЕ?


инструменты - вскод, golangci-lint, gofumpt, mockgen
платформа - docker, minikube. на всех моих работках как минимум CI был в докере.
ну и в каждом первом сервисе постгрес есть. иногда еще редис в добавок, или монга вместо пг.
и очевидно баш: ты делаешь новый сервис, пишешь юнит-тесты, мигрируешь нужные для старта данные в БД, примерно прикинул РТ и нагрузку, но у тебя нихуя нет пруфов по приблизительным RT/SR, которые сервис будет реально выдавать. с башем можно тупо за 10 минут написать скрипт, который для каждой реальной строчки из БД дернет твою ручку, чтобы хоть какую-нибудь статистику собрать и понять насколько ты обосрался
112 2524359
>>524298
>>524211

>Чем вы конкретно занимаетесь на работе (понятным языком)


микросервисы... ну грубо говоря есть два вида задач - технические и продуктовые.
продуктовые это уровня
- есть шина данных (например какой-то топик в kafka или NATS) и сервис, который умеет отправлять пуши пользователям. нужно запилить сервис, который будет слушать шину и при получении определенных событий ходить в rpc ручку сервиса пушей, чтобы отправить эти пуши. а еще нужно запилить дедупликацию с БД/редисом, чтобы одинаковый пуш дважды не отправить. плюс возможно после получения события надо сначала идти в какие-то другие сервисы, чтобы взять нужную инфу для пуша.
- или нужно начать отдавать какие-то данные на фронт, т.к. мы хотим пользователям больше инфы показывать, например граф движения посылки. для этого нужно в сервис с апишкой допилить поход в сервис статусов за этой инфой.
- или так как у нас SSR, то всякие правки текстов тоже на бэкендеров падают.
и технические задачи - это уровня оптимизировать запрос в БД или запилить новую ручку для Х, которая возвращает меньше инфы, но работает быстрее, дергает более легкие ручки других сервисов или вообще не дергает, и переключить потребителей на неё, чтобы подготовиться к росту нагрузки на следующие полгода.
вместе со этим нужно мониторить и дежурить по сервисам своей команды.

>С какими проблемами сталкиваетесь?


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

>И КАКИЕ ТЕХНОЛОГИИ ВЫ ПОСТОЯННО ИСПОЛЬЗУЕТЕ?


инструменты - вскод, golangci-lint, gofumpt, mockgen
платформа - docker, minikube. на всех моих работках как минимум CI был в докере.
ну и в каждом первом сервисе постгрес есть. иногда еще редис в добавок, или монга вместо пг.
и очевидно баш: ты делаешь новый сервис, пишешь юнит-тесты, мигрируешь нужные для старта данные в БД, примерно прикинул РТ и нагрузку, но у тебя нихуя нет пруфов по приблизительным RT/SR, которые сервис будет реально выдавать. с башем можно тупо за 10 минут написать скрипт, который для каждой реальной строчки из БД дернет твою ручку, чтобы хоть какую-нибудь статистику собрать и понять насколько ты обосрался
113 2524560
>>510725 (OP)
Сап, goвнач.
Работаю с голангом полгода на проде.
У нас типо хайлоад и микросервисы, всё деплоится в AWS через docker-compose. Довольно большое и запутанное приложение, но дёргается через POST метод и там дохуища логики внутри.
Есть ещё приложение на гошке, там всего три эндпоинта, которые лезут в другую базу и возвращают результат для мобильного API, написано с GORM, по-сути, там простые круды.

Ну и в чём вопрос. А нормальные компании как испрользуют голанг? Что сейчас вообще делают на гошке? Мне кажется, наши ебантяи неправильно используют говноланг.
114 2524562
>>524560
Почему я спрашиваю? Да меня подзаебал проект, я бы куда-нибудь перешёл и уволился. Но не знаю чем сейчас go живёт, что на нём востребовано. Зарплата очень низкая, на любом другом языке в разы больше платят
115 2524585
Аноны, расскажите про преобразование типов?

Вот есть

> var symbol int32 = 'c'


> fmt.Println(string(symbol))



Значит symbol преобразовывается:
'c' as int32 -> 99 as int32 -> string(99 as int32) -> 'c'
?
Тупой вопрос, но я правильно понимаю что на вход в string подается два значения - число и его тип? А далее так как это метод строки - он выдает строку изходя из своих таблиц?
116 2524589
>>524585
У тебя string() преобразовал в тип данных без изменения содержимого памяти

юзай strconv.Itoa(i)
117 2524623
>>524356

>ML - это язык программирования. Родоначальник целого семейства языков и множества фич. Python своим синтаксисом обязан языку ML. Поэтому пиши Machine Learning.


Я его прекрасно понял, контекста достаточно. Выражение "делать ML" уже стопроцентно говорит, что речь не о ЯП.
118 2524626
>>524562

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


Да ну нахуй, статистика говорит об обратном.

мимо
119 2524639
>>524626
Знакомые программисты на python сходу на 200 и 250к устроились.
120 2524659
>>524639

>Знакомые программисты


>сводная статистика по зарплатам из вакансий

121 2524660
>>524659
Так а у тебя какая сводная статистика по зарплатам из вакансий?
6153cd14043325fd78ad7db9eca86411.png103 Кб, 1560x1520
122 2524662
123 2524667
>>524662

>205k golang



В голосянду. Я же говорю, хуёвая зарплата.
124 2524669
Норм зарплата это от 250к минимум. А если в Москве, то 300к
125 2524724
>>524669
>>524667
Я за 35к го стажером работаю. Ебало мое имаджинировали?
image.png66 Кб, 991x323
126 2524753
>>524585

>на вход в string подается два значения - число и его тип


когда компилятор видит, что ты передаешь rune в string(), он впихивает конверсию к utf-8 репрезентации.

>А далее так как это метод строки - он выдает строку изходя из своих таблиц


но тут нет ни одного вызова метода. и у строк методов никаких нет
127 2524772
>>524667

>140 питон

128 2524803
>>524772
Это чушь. JS и Python - лучшие языки, чтобы заработать первый миллион. А по голангу почти нет вакансий
129 2524804
А как vscode настроить чтобы он мог запускать маленькие примерчики без создания go.mod ?

Не пойму откуда он мой последний launch.json запоминает . Он просто совсем в другом каталоге валяется
130 2524806
>>524804
точнее, я хочу не просто go run, а отлаживать в отладчике эти примерчики
image.png5 Кб, 375x168
131 2524807
Можно ли сделать что-то подобное, записать от range итератор?
132 2524809
>>524806
У меня vscode автоматом позволяет дебажить через Run code
133 2524811
>>524662
Такая хуйня нерепрезентабельна, нужно показывать облачко с количеством вакух и количество опыта. На говяхе джунов и недомидлов практически нет, как и на элексире.
134 2524813
>>524809
так ты создал go.mod или нет?
Это реально пачка файлов с package main, где все имена пересекаются (то есть, наиболее удобный способ поиграться с мелкими примерами) ?
135 2524816
>>524811
Всё так, новые проекты на говне больше не пишут. В России и подавно
136 2524826
>>524804
создаешь лонч.жсон, ставишь курсор в configurations и нажимаешь контролспейс и Launch file даже в подсказках есть

{
"version": "0.2.0",
"configurations": [
{
"name": "Launch file",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${file}"
}
]
}

файлики так

.vscode/launch.json
1.go
2.go
go.mod
image.png73 Кб, 571x559
137 2524830
138 2524840
>>524826
так, вроде я разобрался:
launch.json действительно позволяет отлаживать без хуйни.
но вот go.mod ты зря создал. зря.
изображение.png254 Кб, 438x360
139 2524847
>>524251
ДЖСОНОМЕШАЛКА МЕШАЕТ ДЖСОН
@
БРИГАДА РАЗРАБОВ ЖРЁТ САМОГОН
@
ТИМЛИД ОЛОЛОЕВ В ДОСКУ ПЬЯН
@
НАПЕЧАТАЛ ОН DROP DATABASE
@
ФРОНТЕНДЕР СТЕПАН ENTER НАЖАЛ
@
НАХУЙ ВЕСЬ ПРОД ПОТЁРЛИ РАЗОМ
@
БРИГАДА РАЗРАБОВ ЖРЁТ САМОГОН
@
В ДЖСОНОМЕШАЛКЕ КРОВАВЫЙ РАСТВОР
@
ТЕСТО С МЯСОМ ХОРОШО
@
ЗДЕСЬ УЖЕ ПЕРЕМЕШАЛОСЬ
@
ЭТИ ВКУСНЫМ ПИРОГОМ
@
ВСЕ КЛИЕНТЫ ОБЪЕДАЛИСЬ
@
ДЖСОНОМЕШАЛКА - АЛКОГОЛИЗМ
@
ДЖСОНОМЕШАЛКА - КАНИБАЛИЗМ
изображение.png254 Кб, 438x360
139 2524847
>>524251
ДЖСОНОМЕШАЛКА МЕШАЕТ ДЖСОН
@
БРИГАДА РАЗРАБОВ ЖРЁТ САМОГОН
@
ТИМЛИД ОЛОЛОЕВ В ДОСКУ ПЬЯН
@
НАПЕЧАТАЛ ОН DROP DATABASE
@
ФРОНТЕНДЕР СТЕПАН ENTER НАЖАЛ
@
НАХУЙ ВЕСЬ ПРОД ПОТЁРЛИ РАЗОМ
@
БРИГАДА РАЗРАБОВ ЖРЁТ САМОГОН
@
В ДЖСОНОМЕШАЛКЕ КРОВАВЫЙ РАСТВОР
@
ТЕСТО С МЯСОМ ХОРОШО
@
ЗДЕСЬ УЖЕ ПЕРЕМЕШАЛОСЬ
@
ЭТИ ВКУСНЫМ ПИРОГОМ
@
ВСЕ КЛИЕНТЫ ОБЪЕДАЛИСЬ
@
ДЖСОНОМЕШАЛКА - АЛКОГОЛИЗМ
@
ДЖСОНОМЕШАЛКА - КАНИБАЛИЗМ
140 2524848
>>524847
Но ведь джейсономешалка у гошки не самая лучшая. особенно с Indent
141 2524901
>>524803
Это реальность. Медианная зп на питоне в рф равна 140 тысяч рублей.

>А по голангу почти нет вакансий


Как и конкурентов. В питоне соотношение вакансии/конкуренты гораздо хуже (у питона оно в принципе самое хуёвое, хуже может быть разве что у жс). Ты откуда вылез вообще, я не верю что человек хоть какое-то отношение к рынку айти имеющий может такую дичь писать.
142 2524941
>>524901

>Ты откуда вылез вообще


Я два года писал на Python, потом три года на JS, сейчас вот полгода на golang работаю в коммерческой компании.
По инсайду, golang уже мёртв и нет смысла продолжать его учить
143 2524952
>>524941

>golang уже мёртв


От создателей PHP/Ruby/etc умер.
144 2524955
>>524952
Так-то PHP намного живее и вакансий по нему много.
А golang это признак легаси проекта.
145 2524957
>>524941

>По инсайду, golang уже мёртв и нет смысла продолжать его учить


Как ruby или еще не так сильно умер?
146 2524961
>>524957
Ruby это чисто американская фишка, и он вполне ещё живой.
А golang это хайповый высер google, который нигде, кроме google и не нужен. Всё, что я читаю о "популярности голанга" это мирф от инфоцыганов. По скорости golang уступает даже C#.
Прумиронк.
147 2525009
>>524961
То есть руби живее го?
148 2525020
>>525009
Однозначно. И зарплаты на руби выше. Голанг это бесполезная игрушка
149 2525096
>>524955

>А golang это признак легаси проекта.


>АБЫРВАЛГ!

150 2525105
>>524941
>>524961
>>525020
Толсто. Go и Ruby не отличаются по зарплате. А вакансий для Go в РФ больше в 3 раза. И Go не игрушка, а промышленный язык программирования. Пошел бы ты играть в свою песочницу.

https://survey.stackoverflow.co/2022/
151 2525106
>>525105
Да это тролль из мвп загона вылез
152 2525125
>>524961

>По скорости golang уступает даже C#


fasthttp довольно быстрый.
Кстати говоря, techempower тесты для шарпа оказались хитрой подделкой, а не тестами фреймворка, поэтому тот факт, что asp.net входит в топ-10 по производительности, оказался не более чем маркетинговым буллщитом
153 2525152
>>524961
я думаю тут каждый делает вывод для себя сам хочет ли он писать на шарпе в ланите или на гошке в озоне.
154 2525167
>>525106
Возможно даже лахта серит
155 2525207
>>524941
Верим.
156 2525248
>>524941

>и нет смысла продолжать его учить


ок
мимо вкатился на зп 110к неделю назад
157 2525395
>>525152
я думаю тут каждый делает вывод для себя сам хочет ли он писать на шарпе в тинькофф или на гошке в вайлдберис (:
158 2525525
>>525395
в тинькофф пишут на го) в вб куча легаси на шарпе) делай выводы чмоха
159 2525538

>тинек


>вайлдбериз


Вы тут корпоративными рабами хотите стать? Сильнее сотрудников в жопу ябут только в каком нибудь сималенде
1610965149150789142.jpg80 Кб, 901x696
160 2525606
>>525538
А государь должон быть строг!
А иначе с нами нельзя!
БОЛЬШЕ ВЕШАТЬ!!
161 2525899
>>525606
Это тим лид такое себе позволяет? Почему еще не отпиздили? Накинули бы на него покрывало и повыбивали бы дурь.
162 2526021
>>525395
Тинек больше про скалу+джаву. Но гошка там тоже есть. И шарп тоже.
163 2526342
В PHPStorm если функция бросает исключение, она будет подсвечена. Можно ли добиться того же для panic в go? Как вы вообще определяете свалится ли библиотечная функция в панику? Просто ищете по исходниакм?
164 2526604
>>526342
Схуяли оно должно в панику упадать?
Нормальные либы err возвращают
165 2526633
>>526604

>>Нормальные либы err возвращают


ну значит стандартная библиотека у гошки гавно
166 2526634
>>526633

>го это гавно


ну это база
167 2526671
Скиньте, плизки, отладочный Dockerfile где есть отладчик delve и CGO_ENABLED=1 !?

что-то нихуя не работает с этими либами на Си.
В обычном случае все хорошо. И вроде из vscode проект работает.

devcontaiers не использую - очень сложна там наверчено все. У меня тут просто свои приколюхи с root и libpcap
168 2529595

> Последний пост от 29/11/22


golang умер даже на дваче.
169 2529637
>>529595
Посмотри сколько они в телеграм чате насирают, охуеешь
170 2529806
>>529637
Так там социоблядство к языку не имеющее никакого отношения
171 2529817
>>529637
Закономерно, разрабы на зумерском языке в основном социобляди и на токсичном дваче им не уютно. Страшно представить, что в чатах по JS и петухону происходит, раз они даже здесь срут 100500 постов в день.
172 2529825
>>529817
На токсичном дваче неуютно из-за лахтоботов, модерации от сотрудников псевдочастной компании VK и товарищей майоров, которые захаживают и в тематику
173 2529838
>>529825
РФ уже объявило тотальную войну голенгу и физически истребляет последователей?
174 2529846
>>529817
Там филиал двача
175 2530591
>>510725 (OP)
Gin, Echo или Fiber?
Еле ну его нахуй? Голанг же не про фреймворки
176 2531017
>>530591
Голанг про самописные фреймворки.
177 2531173
>>530591
юзаем на проде Echo, полёт нормальнй
178 2531177
>>531017
А как ты напишешь фреймворк на голанге, если не поработал 5 лет с аналогами?
179 2531196
>>531177
Не поработал с аналогами? Это как вообще? Путь разработки на Go такой: вкатываешься в другой язык, дорастаешь там до миддла, учишь синтаксис Go и вкатываешься, если обнаружил местный велосипедный фреймворк, используешь его, иначе пишешь свой.
180 2531200
>>531196
Да, я почти синиор на своём родном языке. Боюсь вкатываться к go, потому что жёсткие собесы и не выше 120к
181 2531906
Решил я потыкать ваш язык, и чет уже охуеваю.
Есть у меня один микросервис на ноде, который кафку читает, решил я его переписать на го по приколу. Кафка защищена сертами. Переношу рабочие серты в pem формате и ловлю ошибку.

certificate, err := tls.X509KeyPair([]byte(certPEM), []byte(keyPEM))

tls: failed to parse private key

Что не так с этой хуйней?
182 2531933
>>531906
Ничего не знаю, мы тесты написали и тесты проходят.
попробуй тут примеры взять и понять чем твой код отличается от эталонного
https://github.com/golang/go/blob/master/src/crypto/tls/tls_test.go
183 2531970
>>531933
Дядя, я скопировал base64 с тем же самым рабочим ключом, раскодировал в байты и сунул в tls. Код ничем не отличается.

Единственное, ключ начинается вот так:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: BLA-BLA,228E5FE1488BCC00

0g154X8u8c2c2a8b3A22....


А ключи в примерах Proc-Type и DEK-info не содержат. ЧЗХ?
184 2532094
>>531906
хз. с дебагером пройдись
185 2532161
https://play.golang.com/p/TQK7ooUbs3q

Объясните пожалуйста, почему последний элемент никогда не читается горутиной?
Знаю, что это всратое использование каналов, я в данном примере просто надрачиваюсь.
186 2532211
>>532161
close вынеси из горутины чтобы точно исполнилось перед for
187 2532215
>>532211
Уже разобрался. close тут не при чем, до него даже не доходит. Главная горутина завершает работу сразу после помещения последнего элемента в канал - логично, что программа закрывается и дочерняя горутина не успевает.
188 2532358
>>532215

>после помещения последнего элемента в канал


после вычитки последнего элемента
189 2532444
Как лучше всего парсить аргументы?
191 2532480
Как сделать, чтобы проверялось, что не указаны аргументы и выводить из-за этого все аргументы?
192 2532488
>>532358
Почем вычиткиу? В главной горутине мы пишем в канал, а не читаем. Когда читать нечего, главная горутина завершает работу.
193 2532591
>>532215
По-моему ты хуйню написал.
Но хотел написать примерно это :
https://play.golang.com/p/WuCAEpogAQQ

И close тут причем.
194 2532712
>>532591

> По-моему ты хуйню написал.


Все так. Я только учу язык и специально в рамках изучения смотрел, что будет, если писать в канал из главной горутины.
А причем тут close конкретно в моем примере, я не понял. Если мы пишем в канал в дочерней горутине, то ясно, что без нее программа не завершится. Если говорить про изначальный пример, то он там не оказывает никакого влияния на работу если я правильно понимаю.
195 2532838
>>532488
канал же без буфера. главная горутина блочится на отправке до того как придет читатель из канала. когда приходит читатель, значение копируется напрямую со стека отправляющей горутины в стек читающей. в сам канал значение не помещается.
196 2532864
>>532480
взять ос.аргс и проверить длину
197 2533008
>>532712
это и есть твой пример, написанный нормально
198 2533056
>>532161
Я тут понял, что мне тоже следует разобраться с подобной же херней.

Есть простая утилита, которая должна останавливаться по ctrl-c или по юникс-сигналу.
Я делаю на все доступные каналы close, но потоки не всегда успевают корректно завершиться.

Прочитал на stack overflow, что все используют sync.Waitgroup.
Но это по-моему как-то некрасиво выглядит.

как следует спроектировать работу с каналами в моем случае?
199 2533063
https://www.geeksforgeeks.org/how-to-reverse-a-string-in-golang/
Надо прочитать строку задом наперед. Объясните 2 вариант решения, я не понимаю его.
200 2533069
>>533063
Тебе принцип непонятен или код? Я не гошник, но, вроде, разобраться можно.
201 2533116
>>533069
Все непонятно.
202 2533118
>>533056
прочитал в книжке что ВСЕ используют sync.WaitGroup.

Ладно.
203 2533130
>>533118
А все остальные используют x/sync/errgroup
204 2533141
>>533116
Ну, код не расскажу, а принцип такой. Берётся вторая строка, сначала пустая, потом берём из первой строки по одной букве и добавляем СЛЕВА в первую строку.
Например строка "двач"
Берётся первая буква "д", добавляется слева к строке "", получается "д".
Берётся вторая буква "в", добавляется слева к строке "д", получается "вд".
Берётся третья буква "а", добавляется слева к строке "вд", получается "авд".
Берётся четвёртая буква "ч", добавляется слева к строке "авд", получается "чавд".

В общих чертах так.
205 2533150
>>533141
Ебануться, то есть в этом языке не придумали split() reverse() и join()?

Вот такую хуету нужно будет писать каждый раз чтоб перевернуть строчку в реальном сервисе?
206 2533155
>>533150
Ты у меня спрашиваешь? Я го не знаю, я тебе просто алгоритм объяснил, потому что ты сказал, что ты его не понял.
Я даже не знаю, про что статья по ссылке, я только код читал, может там как раз и описывается реализация reverse из их стандартной библиотеки или что-то такое.
207 2533208
>>533008

>написанный нормально


там канал в читающей горутине до сих пор закрывается
image.png761 Кб, 1200x628
208 2533210
>>533208
невермайнд
209 2533224
>>533150
а че там писать
https://go.dev/play/p/eAjyvTJQ1LK
bee14920161975971.jpg26 Кб, 360x360
210 2533856
>>510725 (OP)

>Go является маяком стабильности


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

Мне что, писать тест с unbuffered channels ?
image.png56 Кб, 832x791
212 2533946
213 2533947
>>533946
да, спасибо.
Но это не скрытый пример. Это на stackoverflow есть.

Эта нейронка ведь не сама продуцирует, а гуглит?
214 2533949
>>533947
нейронка дохера чего умеет. Даже юнит-тесты писать
215 2533950
>>533946
строго говоря, код НЕ простой.
Я думал в пакете testing есть какие-нибудь хуитки для детекта дедлоков и тд.

Проблема в том, что юнит-тесты, кажется, сосредоточены на логике предметной области, а все вопросы обеспечивает фреймворк.

Тестировать сами каналы и отвечают ли вовремя функции никому не надо.
216 2533952
>>533949
ну пусть напишет то, чего нет.

Вот этот код надо было найти ей https://stackoverflow.com/questions/24929790/how-to-set-the-go-timeout-flag-on-go-test
217 2534026
>>533914
ну по классике это
select {
case <-c:
case <-time.After(testTimeout):
t.Fatal()
}
image.png1 Кб, 159x56
218 2534267
>>510725 (OP)

>постоянно обновляется сообществом


ебало?
image.png35 Кб, 485x536
219 2534303
>>534267
Пох на дебичей, которую всякую хуйню просят
220 2534305
>>534267
https://github.com/kamranahmedse/developer-roadmap
Вот родмапы свежие
https://roadmap.sh/golang
Но нах они нужны?
221 2534328
>>534305
а вдруг ты забудеш выучить что такое for луп и что делать тогда будешь???
222 2534653
>>533946
что за сайт?
223 2534712
>>534653
Тебя даже вчерашний шторм не разбудил!
https://chat.openai.com/chat
224 2534713
>>534328

>и что делать тогда будешь???


Спрошу у Deus Ex Machina.
225 2534805
>>534712
Как в этой херне русаку зарегестрироваться?
226 2534812
>>534805
Виртуальный фейковый телефон похоже только прокатит.
227 2535153
>>534812
Не прокатит

>>534805
Хуй знает, без реального номера никак
228 2535221
У меня возникло ощущение, что местные дженерик функции это какие-то макросы. С ними нельзя ничего сделать кроме как указать тип, который в последствии генерирует готовую функцию. Ни вернуть, не вставить в качестве аргумента.
image.png23 Кб, 298x291
229 2535270
vet.jpg41 Кб, 745x198
230 2535355
как же бомбит!
Я блядь должен 10 скриптов теперь встраивать в vscode ?

а как У ВАС В КОМПАНИИ? Линтер хотя бы запускаете для разнообразия?
231 2535361
>>535355
точнее, я хотел спросить:
много ли кода использовано с легальным использованием shadowing ?
Возможно, бросаться ставить линтер в CI идея дурацкая и неспроста в golangci-lint не поддерживается нигде
232 2535660
>>535355
>>535361
нихуя не понял. golangci-lint давно умеет шедовинг проверять с помощью настройки go vet
linters-settings:
govet:
check-shadowing: true

>Возможно, бросаться ставить линтер в CI идея дурацкая


нихуя не понял. иметь линтер в CI это базовая вещь

>неспроста в golangci-lint не поддерживается нигде


нихуя не понял. не поддерживается что? где?

>а как У ВАС В КОМПАНИИ? Линтер хотя бы запускаете для разнообразия?


golangci-lint гоняется для всех гошных проектов с небольшой пачкой линтеров. команды по желанию могут расширить набор конфигом

>много ли кода использовано с легальным использованием shadowing ?


а нужно ли изъебываться и креативить с названиями для err
233 2536130

>нихуя не понял. golangci-lint давно умеет шедовинг проверять с помощью настройки go vet



Несмотря на настройку, это не работает. Именно об этом в книжке написано. Я попробовал.
Линтер, который он рекомендует в книжке, справляется.

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


Но ведь это почти единственное применение затенения?
234 2536135
>>535660

>golangci-lint гоняется для всех гошных проектов с небольшой пачкой линтеров


Ага! А с какой именно?
Там сейчас есть дефолтные, но интересно как у людей
235 2536144
>>535660
возможно, я вчера был уставший и не правильно разобрался с go vet shadow.
Вроде бы сегодня все работает.
Соответственно, мне не нужно запускать несколько линтеров и у меня не бонбит
236 2536189
Не совсем понимаю горутины.
вот есть:

func () {
//код 1
go func() {
//код 2
}
// код 3
}
// код 4

код 2 НЕ предшествует коду 3 ?
А выполнится ли код 4 точно после кода 2 ?
где в описании языка об этом явно написано?

То есть, если я выполняю подсчет вызовов горутин через waitGroup, нужно ли мне каждом горутинном блоке дополнительно waitGroup.Add и waitGroup.Done ?
237 2536205
>>536189
У тебя go func уходит в стек вызовов после кода 3
238 2536215
>>536205

>go func уходит в стек вызовов


что эта фраза значит? какое явление описывает? Полностью на тарабарском.

В общем, я решил просто написать тестовую программу и выяснил что вообще ничего не понимаю в Go.
https://go.dev/play/p/ideka61QwER
Как правильно должна выглядеть работа с waitGroup в этом случае?
239 2536261
>>536135
у нас errcheck gosimple govet ineffassign staticcheck typecheck unused
240 2536266
>>536189
В этом примере все по фен-шую?
https://go.dev/play/p/pB2KEw_46Qo

Конечно, в такой простой логике не следовало бы использовать sync.waitGroup, однако мне неизвестно реальное количество обработчиков к тому моменту, как программа решит остановиться. Их будет чуть больше чем создано каналов и поэтому я использую waitGroup.
Но как тут принято делать?
241 2536273
>>536189
2 выполнится после 1, но нет никаких гарантий относительно 3 и 4.
>>536266
wg.Done желательно чтобы было видно там же, где происходит wg.Add. а также лучше wg.Done засунуть в деферы. если опустить глобальную вг и то, что processor завершается раньше тасок (мб с реальным кодом это и будет логично, но в примере кажется, что они могли бы отслеживаться вложенной вейтгруппой, которая создается в processor), то на минималках по феншую это примерно так https://go.dev/play/p/wvvh0AnEviN
242 2536366
>>536273
ok. спасибо.

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


Кстати, так и сделал.

А зачем ты вызываешь функцию processor не как горутину, а через анонимную горутину? В чем тут феншуй?
243 2536873
>>536366
wg.Add(1)
go func() {
defer wg.Done()
это феншуй

а
wg.Done()
...
...
...
...
...
...
...
...
...
...
...
wg.Add(1)
go f()

это такое себе
244 2536909
>>536366
Хороший у вас тред. Как правило, я за 3-5 так или иначе прихожу к тому же ответу, что будет напечатан.

Ладно. И что не так с поддержкой докера в vscode?
Почему в шаблонном проекте не отладочного файла?
Я прям устал с этим compose. Пока не очень работает, но судя по примете, я экспериментальным образом подберу параметры к понедельнику и все заработает.
Нг может есть готовый шаблон?
245 2537282
>>536909
В общем я все починиль.
в VSCode какая-то засада с докером, если он НЕ питон и НЕ нода и НЕ Сишарп.
Единственное, что можно делать - docker compose up (причем нельзя делать посервисное поднятие).
После этого можно делать debug with remote connection.

У меня теперь другая засада : почему-то delve всегда пытается собрать новый бинарник под видом __debug_bin, а у меня в контейнере даже сети нет (так уж надо, в этом суть программы)

Что не так с delve? Как тут собирать бинарник под delve ?
246 2537314
>>537282
сцуко, я тупанул.
dlv debug собирает, а dlv exec запускает.

Все работает, но могу придумать как и сеть отключить и отладчик оставить работать.
247 2537799
где можно купить жидкость для паник в ереване?
248 2537801
>>537799
Для начала нужно нахуй съебаться из этого треда.
249 2537803
>>537801
мне всего пару литров надо для CI
250 2538047
>>521066
Докладываю, бро:

Все очень плохо.

Из-за ебучей системы сборки, Go не знает какой код на самом деле нужно компилить. Информации в файле go.mod недостаточно, ведь есть непрямые импорты. а go.sum используется только для проверки.
В блоге самого Докер, чувак предлагает подцеплять специальный том для кеширования. https://www.docker.com/blog/containerize-your-go-developer-environment-part-2/

В принципи, работает, я немного разочарован.
251 2539533
что выведет программа только не подглядывая
var err error
var val ✡error
var ierr any = err
var ival any = val
fmt.Println(ierr == nil)
fmt.Println(ival == nil)
252 2539537
>>539533
true
false
253 2539540
>>539537
>>539533
Добавлю, что это не просто так.
По умолчанию, оператор присваивания берёт копирует само значение в переменную.
ierr это копия nil
ival это копия указателя на тип error
изображение.png10 Кб, 1517x33
254 2539616
Пытаюсь подключиться к Postgres базе на своём ПК.

const (
host = "localhost"
port = 5432
user = "postgres"
password = "postgres"
dbname = "todos"
)

connStr := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)

db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}

Вылезает то, что на пике.
1)Почему вылезают символы?
2) Как исправить ошибку? Установил postgres на ПК, создал базу todos через pgadmin4(через неё заходит в базу).
255 2539671
>>539616
Правь pg_hba.conf
256 2539684
>>539616

>1)Почему вылезают символы?


Несколько вариантов
- ты бывший 1с-ник.
- ты поставил postgres на венду вместо того чтобы ставить из docker

>2) Как исправить ошибку? Установил postgres на ПК, создал базу todos через pgadmin4(через неё заходит в базу).



Для начала разобраться с текстом. Если перенаправить вывод в файл, то его потом можно раскодировать
257 2539846
>>510725 (OP)
А почему убрали из шапки этот курс? https://www.practical-go-lessons.com/
258 2539849
>>539846
я копировал шапку с пастебина с шапкой, а там видимо не было
image.png20 Кб, 558x260
259 2540207
Вы че ебанутые такие названия классам и методам давать?
260 2541216
>>540207
В Go нет классов. Не обманывайся внешней схожестью синтаксиса с ООП.
261 2541789
>>541216
Какая разница? Какой нахуй Sugar? Какой нахуй NewProduction? Infow? Infof?
262 2541793
>>541789
Процедурщина. В лучших традициях дедов с сишкой.
263 2541817
>>540207
Ах да

>Sync // flushes


СУКА
1000000031.jpg128 Кб, 1118x1280
264 2542125
2457971411.jpg309 Кб, 1756x1310
265 2544118
Есть тут те, кто перекатился на go с java?
Если да, то зачем и почему?
266 2544495
>>544118
Нет смысла переходить, Java до сих пор лучший язык современности. Быстрый и резкий.
Его хейт ТОЛЬКО в сторону тяжёлых фреймворков и индусов.
267 2544570
>>544118
Смысл? Лучше на scala или хотя бы kotlin какой-нить перекатиться, а там можно жить уже.
268 2544571
>>541216
ООП это не про синтаксис. Это парадигма. ООП код вполне можно писать на C.
>>541817
Что не так? В unix есть команда sync например, которая flush`ит файлы из кэша на диск физически.
269 2545097
>>544495
>>544570
Ну, го достаточно хайповый стал, вроде бы. По ощущениям, меньше больших копроративных неповоротливых системы пишут, и больше интересных стартапных.
Так то мне Java, как язык, и так нравится.
270 2545116
>>544571

> ООП это не про синтаксис


Так-то да, но в контексте какого-то языка всегда имеются в виду средства для ООП в этом языке. То есть классы, объекты, инкапсуляция, наследование, полиморфизм и другое говно.
271 2545169
>>544571

>ООП это не про синтаксис. Это парадигма. ООП код вполне можно писать на C.


Это понятно, но писать ооп-лапшу с джаве и писать ооп-лашку в 1с это очень разный экспириенс. Во втором случае у тебя всё наследование и инкапсуляция держаться будет на иоглашениях.
272 2545201
>>545097
Так он хайповый в России или в мире?
273 2545202
>>545176 (Del)
Gin точно хуита. Если попадётся - то это легаси 100%
274 2545299
>>545202
Почему?
275 2545309
276 2545434
>>545201
В РФ много вакансий уже. Вроде тот же хх, авито, сбермаркет, wildberries, Aviasales, ozon на голанге пишут. Некоторые даже свитчеров с Java/C# начали нанимать. Кстати, что интересно, походу только через свитчинг вкат и осуществим в голанг, для джунов вакансий нет, лол.
Просто я немного заебался с корпоративной тягомотины в банке на java, хотя так то мне java/spring стек очень нравиться. Хотя, понятное дело, это больше от проекта зависит, но всё же.
Еще пугает, пишут, что го говнокод зашкаливает, так как у вас там ООП нет и нормально применить всякие популярные паттерны невозможно.
277 2545438
>>545434

>походу только через свитчинг вкат и осуществим в голанг


Недавно кидали вакансию с Яндекса, условием которой был свитчинг на Го, лол.

>так как у вас там ООП нет и нормально применить всякие популярные паттерны невозможно


Это только для тех, кто не понимает сии паттерны.
278 2545443
>>545438

>Это только для тех, кто не понимает сии паттерны.


Что за паттерны такие? Ты имеешь в виду паттерны C-языка что ли?
279 2545450
>>545443
Это множественная форма от слова сей.
280 2545492
>>545434

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


Да ты и сам гавнокодер.
С современном айти паттерны не нужны никому, кроме индусам
281 2545493
>>545434

>В РФ много вакансий уже.


Не для меня вакансии эти висят. Мне нужны Европейские вакансии. На голанге где-то пишут, кроме легаси-контор в РФ?
282 2546101
>>545434
Даже не знаю как гошники живут без AbstractSingletonProxyFactoryBean
283 2546284
>>539846
>>539849
Потому что долбаебы проебали шапку в одном из перекатов вместе с тегом, так что теперь тред даже в каталоге борды не отображается
284 2546293
>>546101
Паттерны появятся, как только индусы ломанутся получать свои 10 долларов в час, гавнокодя на нём для количества строчек
285 2547596
А как тут люди пользуются regex'ом, если нужны какие-то чуть более сложные обработки строк? Или тут такое не принято даже? Надо сторонние библиотеки импортировать?
286 2547992
>>547596

> более сложные обработки строк


define

>как тут люди пользуются regex


Как в любом другом языке - строго по назначению: структурированные тексты небольшого размера
(грепать логи слишком дорого)
287 2548161
>>545434

> так как у вас там ООП нет и нормально применить всякие популярные паттерны невозможно.


Некоторые невозможно, но большинство можно написать, тут нет классического ООП. Да и с другой стороны в чем суть писать всякие паттерны? Никогда не понимал почему джависты срут фабриками
ZalupaFactory zalupaFactory = new Zalupafactory();
ZalupaInAss zalupaInAss = zalupaFactory.getZalupa("inAss");

Вместо
ZalupaInAss zalupaInAss = new ZalupaInAss();

И такое по всему коду, если упадет стектрейс читать невозможно, нахуя весь этот лишний говнокод?
image.png6 Кб, 273x134
288 2548186
Для закрепления базового синтакса решил попробовать прорешать литкод. Дошел до линкед листов и немного опешил. До этого на пистоне для итерации использовал генераторы типа пикрелейтеда.
Поискал как подобное сделать на го и увидел, что самый популярный варинат это через каналы, что мне кажется не совсем чистым, так как требует запуска отдельной горутины (то есть фактически дополнительного треда и средства для его синхронизации). Можно ли как-то альтернативно это реализовать?
289 2548303
>>548186
Что-то ты не то нагуглил, родной.
Я предполагаю как ты размышлял:
листы - итераторы - чем заменить итераторы в Го.

Не пытайся изображать итераторы там где их нет.
Ебош по Кнуту. Структурки, там, указателюшки, if then.
image.png233 Кб, 736x736
290 2548318
>>548303

>Не пытайся изображать итераторы там где их нет.


range
291 2548331
>>548318
А где yield ?
292 2548340
>>548161

>нахуя весь этот лишний говнокод?


>How can an object be created so that subclasses can redefine which class to instantiate?


>How can a class defer instantiation to subclasses?

293 2548342
>>548331
Где-то внутри, иначе как оно работает.
294 2548350
>>548342
Нету его там.
Ты какой из четырех вариантов range имел ввиду?
295 2548351
>>548340

>>How can an object be created so that subclasses can redefine which class to instantiate?


>>How can a class defer instantiation to subclasses?


А зачем это нужно? Я не спрашиваю как создавать подклассы, я спрашиваю нахуя оно нужно? И почему кроме джавистов никто такой хуйней не страдает?
296 2548359
>>548351
орунах
297 2548439
>>548350
Ну вот обычный, который по массивам, слайсам и мапкам бегает, вполне себе итератор.
298 2548470
>>548318
Вынеси range в переменную и дёргай методы итетаров руками
299 2548636
>>548439
но yield ведь нету.

Там наверняка можно что-то накрутить через reflect, но это будет трюк, а не идиома языка
300 2548907
>>548636

> илиома языка


Костыли с каналами.
>>548186
Горутины - не треды. Их можно создавать тысячами.
301 2548951
Если хочу вкатиться в бек или фулстяк, го норм тема? Год работаю js макаком, как то начинает уже заёбывать, хочется расширить квалификацию хотя бы, не вечно же кнопки красить.
302 2548968
>>548951
Вечно красил кнопки, а теперь будешь вечно отгружать жсоны.
303 2548973
>>548968
Чел, не демотивируй меня плс. Бекендеры решают серьёзные задачи, по сравнению с нами фротомакаками. Да и бекенд по универсальнее и шире же должен быть, соприкасается с другими специалистами намного чаще чем фронтенд.
304 2548975
>>548968
Только не жсоны, а протобафы, но это можно и на питоне делать.
305 2548982
>>548973

> Бекендеры решают серьёзные задачи


Да, с серьёзным видом отгружают жсоны.
Хорошо там, где нас нет.
306 2549036
>>548636

>но yield ведь нету.


Я кажется понял в чем наше недопонимание

Вопрос в том, действительно ли мы не можем создать свой итератор типа range, потому что создали языка просто скрыли аналог yield внутри компилятора и могут его юзать, но не дают это делать пользователю?
307 2549183
>>549036
yield не скрыли. его просто никогда не было.
тот range, который ты считаешь за аналог итерирующего range в python, это range, который умеет итерироваться по срезам и map.

И больше ничего.
Нет никаких итераторов в Go.
308 2549292
>>549036
Макака путает итераторы и генераторы, причем их конкретную имплементацию с yield. Забей на него.
Мимо
309 2549352
>>549292
ну давай покажи как надо
заставь это работать
https://go.dev/play/p/ZY4ckeLKPwn
310 2549356
>>546293

> Паттерны появятся


if err != null
наш главный паттерн. Джависты так не умеют
311 2549481
СОЗДАЙ СВОЙ СОБСТВЕННЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ

https://dmkpress.com/catalog/computer/programming/978-5-93700-140-5/

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

Издание предназначено для разработчиков программного обеспечения, заинтересованных в разработке собственного языка программирования или адаптации существующего языка для той или иной предметной области. Студентам, изучающим информатику, книга пригодится как практическое руководство по разработке языка.

Для изучения материала понадобятся базовые знания и опыт работы с языком высокого уровня, таким как Java или C++.
312 2549514
>>549481
Че донести хотел?
Этот вопрос со времен Dragon Book (1977) закрыт.
Ну гошники могли еще у K&P (Керниган и Пайк, это немного другая книга, но тоже хорошая) ознакомиться с lex и yacc
313 2549529
>>549352
хочется ебнуть по рукам за такой код

https://go.dev/play/p/qxjWa-eWYvS
314 2549551
>>549529
ты вообще что написал? Я не просил исправить код. Я просил показать как надо использовать итераторы в Go.

Я не вижу тут ни аналога yield(), ни аналога __next__()
315 2549568
>>549481
Если можно, поделитесь книжкой пожалуйста.
316 2549797
Всё таки лучше го, пайтон или что-то ещё (нахуй пхп) для вката в бек?
317 2549805
>>549797
На голенге почти нет вакух для ждунов, на пистоне что бы вкатится нужно пробиться через тысячу таких же вкатывальщиков, выбирай.
318 2550221
>>549797
Ты спросил в Go-треде, но не в тредах про питон и пхп, значит, выбор ты уже сделал.
Хотя хуй в бэк вкатишься через Go, здесь одни миддлы перекатываются из бэка на других языках.
319 2550265
>>550221
Да, потому что пхп вызывает отторжение, в питон сложно вкатиться, я думал в го есть хотя бы относительный кадровый дефицит.
320 2550269
>>550265
В Go нет кадрового дефицита, это язык для тех, кто знает, чего хочет, а не чтобы массово клепать бизнес-логику, как во всяких джавашарпах, где вечный дефицит кадров.
321 2550287
>>550269
Джава говно уровня пхп, не хочу. Цшарп уже лучше, но всё равно хочу что то новое. Го так плох для вката?
322 2550299
>>550287
Попробуй C++.
323 2550322
а в авито еще есть смысл подаваться стажеру/джуну?
324 2550326
>>550322

> стажеру/джуну


Нет. Не ищи лазеек, их нет.
325 2550697
>>550693 (Del)
В Go тесты - антипаттерн.
326 2550720
>>550693 (Del)
большой вопрос что именно называть "интеграционными" ?
Библиотеку со специальным названием подсказать? Я не знаю.

github actions запускается прямо на ubuntu с установленным docker.

И что тебе еще нужно, хороняка?
327 2551666
>>550693 (Del)
у нас делается так: поднимается сервис и БД, соседние сервисы мокаются через ховерфлай. отдельный тестовый бинарь кидает запросы в поднятый сервис.
ну и нужно подумать надо ли оно тебе. мб тебе интеграционных тупо на репу хватит, а ручки можно юнитами протестить.
328 2551971
>>551798 (Del)
структурно вроде норм, так и должно выглядеть, разве што респонс не проверяется. единственные вопросы такие
- не видно как завершается app (t.Cleanup есть?)
- непонятно зачем t.Error с return, когда есть t.Fatal
- string(body) с %s можно не делать
329 2551980
>>550322
подаваться есть смысл всегда. что тебе херочка сделает? приедет и разобьет ебало?
330 2552005
>>551798 (Del)

>Интеграционные и юнит тесты довольно логичное разделение.


ето да.
но как отделить интеграционные от дымовых и функциональных?
должен ли ты написать кучу разных mock-объектов или достаточно въебать какой-нибудь конфиг в docker имитирующий бд и батник с тестами?
331 2553729
>>553721 (Del)
И вообще, раз это интеграционный тест, то лучше просто поднять в коде веб-сервер, благо в 2022 с этим проблем.
332 2553730
>>552383 (Del)
классификация тестов - настолько неоднозначная и сложная штука, что нормальные компании на нее забили.
и вот что они предлагают:

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


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

ЮТакая классификация, в отличие от более традиционного деления на «юнит-тесты»
или «интеграционные тесты», была выбрана, потому что для нас важнее такие
качества теста, как скорость выполнения и детерминированность независимо от
широты охвата тестирования. Маленькие тесты с любой широтой охвата за счет
ограничений, наложенных на них, почти всегда быстрее и более детерминированы,
чем тесты, вовлекающие в работу обширную инфраструктуру или потребляющие
больше ресурсов. С увеличением размеров тестов многие ограничения ослабляются.
Средние тесты обладают большей гибкостью, но они недостаточно детерминированы.
Большие тесты сохраняются только для самых сложных и комплексных сценариев
тестирования.
333 2554004
>>553730
Годный пост, продвину в своей галере такую классификацию
334 2554140
>>554026 (Del)
Все равно не ясно.
Давай на примере. Анон пишет некий ссылкосокращатель.
Как бы выглядел интеграционный тест и чем он отличался бы от функционального?
Интеграционный должен использовать мок-класс , а функциональный мок-вебсервис?
335 2554204
>>554154 (Del)
Стало только хуже. Ты мемасы локальной конторы выдаешь за суть индустрии.
Вот одна из твоих ссылок сообщает:

>The difference is that an integration test may simply verify that you can query the database while a functional test would expect to get a specific value from the database as defined by the product requirements.



Ну вроде понятно, но смущает что все по-разному пишут
336 2554311
>>554259 (Del)

>Мне больше нравится классификация от softwaretestinghelp, там вообще логичнее все. В рот их короче ебал


но там вообще нельзя отделить Функциональный от Интеграционного.
У них функциональность как отдельный признак.
Еще большая хуйня.

Хотел повыпендриваться знаниями? Так приходи подготовленным... на конференцию со звездами
59.mp4706 Кб, mp4,
486x848, 0:05
337 2555011
Ананасы, поясните момент и https://go101.org/article/channel-closing.html пример номер четыре

написали ахуительную функцию stop, а пояснить не поянили

// The stop function can be called
// multiple times safely.
stop := func() {
select {
case closing<-struct{}{}:
<-closed
case <-closed:
}
}

Ок, послали closing<-struct{}{} первый раз, это понятно.
Нахуя сразу же блокироваться на <-closed?

Если мы положили в не буферизированый канал closing<-struct{}{}, то он заблокируется и пре остальных случаях вызова stop мы будем сразу прееходить в ветку case <-closed и ждать пока канал closed закроют?
Аналогично этому мы блокируемся сразу после closing<-struct{}{}, чтобы первый вызов <-closed тоже заблокировался по аналогии с последующими вызовами stop?

Правильное рассуждение для чего нужен этот ебаный цырк? Эта ебка нужна, чтобы тот кто вызывает stop не упал с паникой потомучто канал закрыт, а просто блокировался?
338 2555045
>>555011

> go101.org


хуй знает с чего ты решил что это хороший сайт.
Вот хороший сайт:
Язык_программирования_Go_2016Керниган.pdf
978544611885_Go__идиомы_и_паттерны.pdf

Чтобы горутина завершилась при close пиши в ней :
for elem := range channel {
fmt.Println(elem)
}
339 2555054
>>555011
Ну вроде там все написано. Берем пример 4:

>Sometimes, it is needed that the close signal must be made by a third-party goroutine. For such cases, we can use an extra signal channel to notify the sender to close the data channel.



Но я не понял твой вопрос и с чего ты взял что там неблокирующийся канал использован? Это обычная техника.
Есть ситуации когда переменная-канал просто недоступна и какая-то горутина захочет все равно остановить или подать сигнал внутрь. В этом случае читают с помощью select из двух каналов сразу. struct {}{} используют как канал, но без конкретных данных.
340 2555100
>>555054
Описание говорит we can use an extra signal channel to notify the sender to close the data channel.
А как нихуя не пояснили, просто высрали код.

>читают с помощью select из двух каналов сразу.


case closing<-struct{}{}:
Это же запись в канал идет, а не чтение,можно понять хотя бы метом исключения, потомучто по коду больне никто не пишет в closing.

Вопрос конкретный, какого хуя происходит в коде
stop := func() {
select {
case closing<-struct{}{}:
<-closed
case <-closed:
}
}

почему он должен останавливать сендер и почему его можно вызывать много раз?
341 2555101
>>555045

>сайт


>дает название книги



Хуя дебил
342 2555324
>>555100
как-то сложно наворотили, но я вижу что каналов два и как бы два статуса "сейчас closing" и "уже closed".
сами себе подают сигнал что ВСЕ.
343 2555325
>>555101
постирония, не твой конек, да?
344 2555779
>>524359
Офигенно, раскажи ещё чего нибудь
346 2557329
>>555325
Как и твоя пунктуация.
347 2557459
>>510725 (OP)
Ваши прогнозы на 2023й год?
Будет ли говноланг где-то востребован, кроме русских банков?
348 2557476
>>557459
Не будет, скриньте.
349 2557481
>>557459

> кроме русских банков


А там хоть что-то кроме джавы есть?
350 2557486
>>557481
Есть PL/SQL и немного делфи и вижуалбейсика для клиентов.
351 2557499
>>557481
Ну вот как раз голанг ВНЕЗАПНО заходит в русские банки
Почитай вакансии голанга - там будет про то, что "переходим/переписываем на голанг"
352 2558519
>>555779
да хз че рассказать еще, я не особо дохуя интересного делал. можеш вопросы задать
1658657149259689.png442 Кб, 693x725
353 2558520
>>557459
так еще маркетплейсы/классифайды же есть. ну и в крипте тоже вроде применяют. ну т.е. всё что загребание бабла
354 2558798
>>557459
>>557476
>>558520
Сейчас почти все МЯСО (кроме банков) в большинстве случаев пишет весь новый бекенд именно на го, насколько я слышу от своих одногруппников, которые там работают. Сам таким образом случайно вкатился го стажером в сентябре, хотя изучал долгое время жабу и спринг. Просто HR сказала, что команды с джавой стажеров себе не ищут, а вот те, что на го пишут, часто ищут себе стажеров в последнее время, ну я и согласился пройти собес просто ради интереса.
И там где я работаю, все старье с питухона/С++/иногда жабы/etc переписывают на го.

>>545434

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


А крупняк почти не нанимает джунов, они нанимают стажеров, из которых потом делают джунов.
Так вот вб, авито, озон стажеров точно нанимают на го, лично знаю стажеров (или уже джунов) из этих мест.

>>544570

>scala


Скала кажется скорее метрва, чем жива. Самое крупнейшее сообщество скалистов в РФ - Тинькофф, и те начали от скалы уходить.
355 2560657
Умеет ли голанг в мулти-компиляцию на разные ОС?
356 2560658
>>560657
да, умеет, нашёл. ну и подставить goos goarch свои значения
GOOS=linux GOARCH=amd64 go build -o linux_amd64
357 2560818
>>560658
Хоть один язык, где кросскомпиляция сделана без анальной ебли десятью неграми.
358 2561017
>>560818
А по поводу RUST?
2023-01-0217-52-25.png7 Кб, 1352x102
359 2561054
>>510725 (OP)

>- Читаем документацию прямо по порядку (пункт "Learning Go"):

sage 360 2561057
>>561054
Блять, как же вы заебали выёбываться на шапку, ну перекатывайте сами, раз такте умные.
361 2561129
>>561057
Никто не выёбывался, я реально нихуя не понял что имелось в виду, там какой-то конкретный раздел, просто по-другому называется или подразумевается что страничка документации это и есть "Learning Go"?
362 2561173

>не мочь в документацию


Не, ну голанк не для вас.
363 2561176
>>561173
Документация - это видосики на ютубе.
364 2561178
>>561176
Среди видосиков только от Ardan Labs хорошие
365 2561188
>>561178
Почему всё на английском, где русек(((
366 2561193
>>561188
Английский язык это первый язык, что изучает программист
367 2561197
>>561173
Только доки и читаю всегда. Вопрос был что имелось в виду в шапке. Мне в общем-то похуй, что на него ответят, просто любопытно
368 2561258
369 2561274
Поясните за context.Context. Я правильно понял, что сам по себе он никакие функции не кенселит, это задача кода переодически проверять не был ли context кэнселед и если да, то выходить с ошибкой?
370 2561346
Аноны, чё делать.
Сам я воннаби свитчер из пхп.
Надо по хорошему ебануть пет уровня очередного блядь говнокруда ебаного которые я в рот ебал: туду лист, 100 любимых фильмов и т.п.
Но у меня такое лютое полшестого при одной мысли, что я буду БЕСПЛАТНО делать хуйню, которой уже не первый год занимаюсь за деньги.
Хуй привстаёт только на идеи оффлайновых консольных приложух - архиватора, простенькой субд (особенно на это).
Тут писали, мол го это про круды, значит пиши круды или работодатель покрутит пальцем у виска. Но это такой мрак. Поддержите что-ль и скажите, что субд тоже норм, или подкиньте идей хоть для самую малость интересного круда. Ну а с меня нефть.
371 2561359
>>561346
Докер, кубер, прометеус, консул и много чего ещё написаны на го и никто у виска не крутит. Пиши чё по кайфу. Единственное: но го не принято писать приложухи, которым нужна предсказуемая latency, потому что GC. Так что СУБД всё-таки мимо, хотя в академических целях чему бы и нет.
372 2561368
>>561346
никакому нормальному челику не будет интересно твой пет/кофешоп листать. это что-то вроде лаб из универа, тысячная вариация одной и той же хуиты на гитхабе каждого второго индуса/китайца. ты уверен, что хочешь идти работать на людей, которым это интерсно?

>подкиньте идей хоть для самую малость интересного круда


>>>2397240 (OP)

373 2561375
>>561368

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


Хороший вопрос. А что, вопрос в хайринге разрабов на гоху не стоит таким образом, что люди без пета автоматически идут нахуй?
Я просто не в курсе реалий гошного рынка, а петов никогда не писал именно с целью показывать при найме, все мои петы сделаны для себя на языках, на которых я вряд ли буду когда-то работать (хотя чем чёрт не шутит, мой самый жирный - это мод для майнкрафта)
374 2561376
>>561274
да. он насильно не убивает горутины и даже стак не разматывает. функции сами решают обрабатывать ли отмену контекста и как.
375 2561377
>>561274
Все так.
376 2561901
Go-господа, какие материалы для изучения GO на русском можете порекомендовать? Англ еще учу - пытаться еще го учить со своим знанием языка совсем тяжко.
Спасибо!
377 2561907
>>561901
Можешь дёрнуть курсы Otus с торрентов, мне такое особо не нужно, т.к. много воды и я не новичок, чтобы так мне всё разжёвывали, но тебе может и пойдёт
https://pastebin.com/fFyjSjJB
378 2561911
>>561901
Ну и go-tour с твоей вводной можешь даже не открывать - он для людей, знакомых с другими языками.
379 2561923
>>561911
>>561901
Да, забыл добавить - я уже самостоятельная личинка веб-макаки фулстек на node.js хочется перекатиться на что-то более фундаментальное
380 2562284
>>561346

> Тут писали, мол го это про круды, значит пиши круды


Кто и где такое писал?
381 2562297
>>562284
Было
https://2ch.hk/pr/arch/2022-11-09/res/2409760.html (М)

>Не слушай этого мудака, какой ещё нахуй n-body simulator, на тебя там все как на идиота посмотрят и спросят, ебанутый ты или да а ты и да, не рассказывать же на собесе, что послушался совета на двачах.


Го это на 99% язык для системных и околосетевых приблуд, докеров, сервисов, веб-сервисов, банкинга, недо-бд и так далее и тому подобное.
Поэтому для начала сделай простенький веб-бэкенд, чтобы получать запросики и сохранять их в бд и обратно. Хотя бы.
Потом попробуй поверх какую-нибудь бизнес-логику накрутить, например написать сервис-сокращатель ссылок, а лучше что-нибудь с фоновой работой
382 2562322
>>562297

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


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

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


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


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


С - системность
а до конца мы не дочитываем, выхватываем только то что нам удобно?
384 2562473
>>562322
Такая напыщенность, а когда задают вопрос "чем конкретно занимаешься":
>>524359
продуктовые это уровня
- есть шина данных (например какой-то топик в kafka или NATS) и сервис, который умеет отправлять пуши пользователям. нужно запилить сервис, который будет слушать шину и при получении определенных событий ходить в rpc ручку сервиса пушей, чтобы отправить эти пуши. а еще нужно запилить дедупликацию с БД/редисом, чтобы одинаковый пуш дважды не отправить. плюс возможно после получения события надо сначала идти в какие-то другие сервисы, чтобы взять нужную инфу для пуша.
- или нужно начать отдавать какие-то данные на фронт, т.к. мы хотим пользователям больше инфы показывать, например граф движения посылки. для этого нужно в сервис с апишкой допилить поход в сервис статусов за этой инфой.

Эм, это как-то не похоже на системное программирование и на отсутствие задач для бекендера типичного кодерка, который ни в чём не разбирается, не находишь?
385 2562577
>>562473
Я просто имел ввиду, что для вкатыша не может существовать пет-проекта на Go.
Пет-проект должен приносить радость. Нужно с ним нянчиться как с Pet.

Хорошо, если ты админчик или увлеченный хакер.
Но вкатышь из php не может им быть.

Кстати, кафки эти ваши, тоже какое-то бесполезное говно созданные потому что в больших корпорациях а) не знают что делать с данными, но знают что за их удаление их не простят
б) не могут договориться как их обрабатывать и поэтому делают шину.
То есть, это все непостижимо выходцу из мира обычных приложений.
386 2562578
>>562471

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


с какой целью? в чем удовольствие ?

Пет-проект должен приносить радость с первых дней существования
изображение.png51 Кб, 636x527
387 2562581
Вот, нашел вам пет-проект https://github.com/usher2/u2ckdump
Вкатывайтесь!

Тут, правда, ОПЯТЬ нужно понимать проблематику, а лучше быть админчиком сетей доступа в Многострадальной Россиюшке.
388 2562606
>>561346
Свой движок СУБД писать интересно, но боюсь что очень долго, да и без подготовки имхо тяжеловато будет.
Я вообще никаких петов на го в свое время не писал, просто сказал на собеседовании, что прошел го тур (но при этом был опыт на другом языке), в итоге взяли. А вообще лучше ковырять что-то уже существующее в опенсорсе, а не писать свои велосипеды, пользы больше будет + прокачаешь навык чтения кода.
389 2562623
>>562581

>Тестов наделать например


Дебсы все еще верят в то что написать хороший тест не в десять раз сложнее чем написать говнокод который он должен тестировать.
Также дебсы продолжают писать assert 1+1==2 и думают что это несет хоть какую то пользу хоть кому то.
390 2562653
>>562578
Ну так можно рогалик сделать, и похую кто там чё итт скажет по поводу можно ли использовать го для этих целей или нет. А действия мобов в многопотоке обрабатывать
391 2562658
>>562606

> прокачаешь навык чтения кода


Я как-то не замечал раньше, чтоб чтение кода было каким-то отдельным навыком, хз. Но совет про чтение опенсорса всё равно понял и принял.
392 2562747
>>558519
Расскажи, что спрашивали на собесе когда устраивался
393 2562787
>>562747
Дрочили вопросами про панику, рекавер, и что выведет append ))))
394 2562927
>>562629 (Del)
Да, но не совсем понятно откуда эти данные берутся.
Кажется, не везде стоят ТСПУ и кое-где есть самодельные блокировщики. Эту инфу сливают и этот тип делает какого-то бота.
Почему на Go - не ведаю.

Еще он автор доклада "Почему Golang такой странненький".Просто ему нравится писать.
395 2562930
>>562787
а что то про технологии с которыми работал спрашивали?
396 2563326
>>562747
что такое горутины, как они шедулятся, чем обработка неблокирующих сисколов отличается от блокирующих, как гц работает, как подобрать таймаут на сетевой запрос, че там в пакете sync и как работает, ну дохуя классических вопросов в общем
>>562930
про кубер пара вопросов есть, но чисто как бонус. из тулзов нужно знать ппроф/трейс, чем моки можно генерить. уметь sql писать, уметь пользоваться индексами. ну и уметь пользоваться каким-нибудь месседж брокером, а то иначе странно. плюс знать что такое метрики и нахуя (это к слову как таймаут подбирается) и такое
397 2563427
>>563326
спасибо, а то хочу свичнуться из ts бэка на го, и хочется быть готовым ко всему на собесе
398 2563540
Когда делаешь слайсинг, оно просто меняет лен и делает новый поинтер на тот участок или как?
399 2563557
>>562577

>То есть, это все непостижимо выходцу из мира обычных приложений.


А кому постижимо?
400 2563561
>>563557
Глупых вопросов не задавай.
Таким надо родиться, очевидно же.
401 2563627
>>563557
постижимо, если тебя наняли упругим студентом и ты там 2 года поебался с кафками за (небольшие) деньги.
Пользу фрилансеру или мамкиному борщехлебу кафки принести не могут. Если ты пытаешься это изучать бесплатно, то мотивации не будет.
402 2563631
>>563540
что за тупой вопрос?
не можешь сформулировать слова понятно - напиши код.
403 2563917
>>563627
Нет, непостижимо. Выше говорили, что таким надо родиться. Ты либо рождаешься гофером, либо не рождаешься им, третьего не дано.
404 2564051
>>563540
Да, и про это было в пщ-туре

https://go.dev/tour/moretypes/11
405 2564613
>>522599
Для отсрочки от мобилизации
406 2564709
Как вкатиться в Го с другого языка? Вакансий на джуна гофера практически нет.
407 2564713
>>564709
Хороший вопрос
Лично я вкатился на гошку, когда пришёл на проект, в котором был golang
Просто начал решать таски по нему
408 2565239
>>564709
вакансий на джуна в принципе нет
409 2565240
>>564613
Вообщем нет, но cs база мб полезной также некоторые крупные компании типа IBM смотрят на это и существуют различные программы иммиграции с балльно рейтинговой системой канада / австралия, если тебя это интересует
410 2565825
>>564709
Го это немного специфичный язык, на который как правило переписывают уже устоявшиеся копролиты на других языках (зачастую php). Поэтому чисто гошных вакансий мало, зато дофига вакансий PHP+Go, Java+Go, и так далее.
А особенно сейчас, когда многие конторы релоцировались и с рынком вакансий черте что происходит.
Тем более, что джуны никогда никому не были особо нужны, потому что джун в первый год-два это чистый убыток, мало того, что ему надо зарплату платить, так он ещё и отвлекает других разработчиков, которые иначе бы полезные дела делали.
411 2566382
>>565825

>А особенно сейчас, когда многие конторы релоцировались и с рынком вакансий черте что происходит.


На гошке сейчас вакансий в России больше, чем в Европе
412 2566877
>>566382
В целом ожидаемо, на го мне кажется условных сеньоро-миддлов больше, чем джунов и многие из них уехали, "закрыв" вакансии в ЕС и "открыв" их в РФ.
Тем более сейчас очередной финансовый кризис, медвежий рынок, вот это всё.

Но вот что будет в будущем, в том числе краткосрочном, и не закроют ли найм в россии - непонятно. Я разные прогнозы встречал.
413 2567073
>>567065 (Del)
Он обкурился сишкой, где тоже любят из функций возвращать коды ошибок. Хотя уже тогда там были setjmp/longjmp, используемые некоторыми для эмуляции эксепшенов.
414 2567131
>>567087 (Del)
Из плюсов возврата ошибки в сравнении с ексепшенами:
1) Проще делать всякую около-ошибочную логику, вроде retry-ев всяких backoff, circuit breaker, etc
2) Асинхронщина. В общем случае не ясно когда завершиться (к|г)орутина, и тем более не ясно catch-ить её эксепшен в другом условном потоке
3) Производитльность. Стек трейс штука не бесплатная, в ряде случаев еще и бесполезная например когда разработчик ожидает конкретный эксепшен и делает что-то вместо логирования

Из минусов очевидное:
Но 99% случаев это да, замусоривание кода if err != nil { return nil, fmt.Errorf("do huina: %w", err) }
415 2567155
>>567065 (Del)
пайк ругался, если я получаю ошибку и не обрабатываю, причём не просто вконце функции, а непосредственно после вылезания ошибки, и сам потом мне говорил: вот я получаю ошибку и обрабатываю, и ты так делай!
416 2567158
>>567144 (Del)
Каждый дрочит как хочет, есть, например, json либа, где в случае чего - паника, а потом на верхнем уровне - recover и возвращается ошибка значением. В yaml тоже самое. В sql.Rows сохраняется ошибка в структуре, а в каждом методе структуры проверяется эта сохраненная ошибка, и в случае её наличия метод ничего не делает. Это самое близкое к тому что ты написал. Но там это нужно для другого, а твой вариант не решает проблему того что надо if err != nil писать, просто перемещает эту проверку внутрь вызываемых функций. + бонусом добавляет проблему, что когда ошибка попадет в логи будет не ясно из какой именно функции она пришла.
417 2569018
>
418 2569029
Читаю про многопоточку в го-туре. Человек, до этого знакомый с многопоточкой на уровне "ну есть такое явление, слышал есть в ОС какие-то треды, там мьютексы пайпы семафоры". Вообще охуенно, не знаю это именно в пщ так пиздато сделано или меня просто так новая тема захватила, но штырит так что второй день нормально работать не могу, думаю о многопоточке.
419 2569059
>>567144 (Del)
а как ты поймёшь, какой еррор был в итоге? Хуйня как по мне

вообще всё это дрочь, экспешны проще. Бесят адепты гошки, которые с вдохновленными лицами рассказывают, как ЕС удобнее
420 2569093
>>569059

>экспешны проще


Это когда нормальные.
В 1с например есть эксепшены, но он такие всратые, что обычно видишь

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

image.png58 Кб, 489x729
421 2569522
>>569059
согласен намного лучше чем err != nil
422 2569529
>>569029
Экскепшены тоже хуйня, потому что ломается вывод типов, неудобно чейнить код с ними, паттерн матчинг не заюзаешь, они требуют больше ресурсов при выбросе для раскрутки и так далее.
Лучше всего имхо это сделано в расте. Псевдокодом:

fun Foo() Result[int64] { // Result[T] = T || error
foo()? // ? - это сахар вокруг if err
bar()?.wrap("comment") // допишет в ошибку "comment" для трейсинга
switch b := baz() {
case error: обрабатываем b отдельно как ошибку, если очень надо
case specialError: обрабатываем b как специальный тип ошибки
case value: обрабатываем b как результат (если ошибки не было)
}
b := bazz()? // вернет ошибку, если b это ошибка иначе присвоит b значение
}

Отличный микс подходов. Компилятор генерирует эффективный код, ошибки видно в сигнатуре функций, легко резолвит нуллабилити, удобно для функциональщины, удобно для чейнинга, удобно обрабаывать ошибки и контекстуализировать их, не требует ни многострочных try(e) catch {throw e2(e)} на каждый пук.

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

----
Ну и если уж взялся рекламировать раст, отдельный ништяк это иммутабельные ссылки/указатели.
В го указали используются для нескольких вещей:
1) Передать указатель на что-то внутрь функции, чтобы поменять значение внутри, к пимеру функция sort(slice []T)
2) Сделать что-то опциональным/нуллабельным
3) Оптимизация лишних выделений памяти при копировании, которые произойдут, если начать большую структуру передавать в функции по значению

Хуйня в том, что не всегда понятно, зачем что-то передается по указателю в конкретном месте. Просто непонятно по сигнатуре функции, визибилити нет.
В расте же каждый из этих моментов реализуется по своему:
1) можно передать не sort(slice
[]T) а sort(slice mut []T) тогда сразу понятно, что это мутабельная хуйня и slice внутри функции будет изменяться
2) можно передать не sort(slice
[]T) а sort(slice immut []T) тогда сразу понятно, что это иммутабельная хуйня и указатель тут нужен для оптимизации передачи данных
3) можно передать не sort(slice
[]T) а sort(slice Optional<*[]T>) тогда сразу понятно, что slice опционален и его можно не передавать. Кстати, отдельным ништяком, Optional надо резолвить, доставая из него значение и поэтому nil pointer exception невозможен в принципе, ты не сможешь накосячить и попытаться разыменовать пустой указатель.

Короче имхо между Rust и Go потерялся идеальный язык. С гошной экосистемой, гошным рантаймом и прочими ништяками, но при этом с чуть большей свободой по работе с VM и памятью и разумным количеством сахара, чтобы не захламлять код обработкой ошибок, проверками на nil и прочим скамом из 80х
422 2569529
>>569029
Экскепшены тоже хуйня, потому что ломается вывод типов, неудобно чейнить код с ними, паттерн матчинг не заюзаешь, они требуют больше ресурсов при выбросе для раскрутки и так далее.
Лучше всего имхо это сделано в расте. Псевдокодом:

fun Foo() Result[int64] { // Result[T] = T || error
foo()? // ? - это сахар вокруг if err
bar()?.wrap("comment") // допишет в ошибку "comment" для трейсинга
switch b := baz() {
case error: обрабатываем b отдельно как ошибку, если очень надо
case specialError: обрабатываем b как специальный тип ошибки
case value: обрабатываем b как результат (если ошибки не было)
}
b := bazz()? // вернет ошибку, если b это ошибка иначе присвоит b значение
}

Отличный микс подходов. Компилятор генерирует эффективный код, ошибки видно в сигнатуре функций, легко резолвит нуллабилити, удобно для функциональщины, удобно для чейнинга, удобно обрабаывать ошибки и контекстуализировать их, не требует ни многострочных try(e) catch {throw e2(e)} на каждый пук.

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

----
Ну и если уж взялся рекламировать раст, отдельный ништяк это иммутабельные ссылки/указатели.
В го указали используются для нескольких вещей:
1) Передать указатель на что-то внутрь функции, чтобы поменять значение внутри, к пимеру функция sort(slice []T)
2) Сделать что-то опциональным/нуллабельным
3) Оптимизация лишних выделений памяти при копировании, которые произойдут, если начать большую структуру передавать в функции по значению

Хуйня в том, что не всегда понятно, зачем что-то передается по указателю в конкретном месте. Просто непонятно по сигнатуре функции, визибилити нет.
В расте же каждый из этих моментов реализуется по своему:
1) можно передать не sort(slice
[]T) а sort(slice mut []T) тогда сразу понятно, что это мутабельная хуйня и slice внутри функции будет изменяться
2) можно передать не sort(slice
[]T) а sort(slice immut []T) тогда сразу понятно, что это иммутабельная хуйня и указатель тут нужен для оптимизации передачи данных
3) можно передать не sort(slice
[]T) а sort(slice Optional<*[]T>) тогда сразу понятно, что slice опционален и его можно не передавать. Кстати, отдельным ништяком, Optional надо резолвить, доставая из него значение и поэтому nil pointer exception невозможен в принципе, ты не сможешь накосячить и попытаться разыменовать пустой указатель.

Короче имхо между Rust и Go потерялся идеальный язык. С гошной экосистемой, гошным рантаймом и прочими ништяками, но при этом с чуть большей свободой по работе с VM и памятью и разумным количеством сахара, чтобы не захламлять код обработкой ошибок, проверками на nil и прочим скамом из 80х
.png11 Кб, 403x229
423 2569530
>>569522
Ты дебил?
424 2569531
>>569530
а как ты поймёшь, какой еррор был в итоге? Хуйня как по мне
425 2569536
>>569531
А в твоём примере как поймёшь? Ты точно так же возвращаешь самую первую ошибку.
426 2569538
427 2569614
>>569536
В го в этом то и прикол, что ошибки контектуализируются:

if err := foo(); err != nil {return fmt.Errorf("FOO: %d %w", userID, err)}
if err := bar(); err != nil {return fmt.Errorf("BAR %d: %w", whoreID, err)}
if err := baz(); err != nil {return fmt.Errorf("BAZ %d: %w", motherID, err)}

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

В го же ты в итоге получишь прям контекстуализированное сообщение об ошибке:
cant exec scenario 221: can't load user 115: can't find object "dick": gay detected
428 2569810
указатели и ошибки не понимают вкатуны или гавноскриптеры.
429 2570168
не понимаю указатели, в сторе создаю слайс указателей на структуру юзер и возвращаю слайс в хендлер, всё так делаю или как, как будто просто хуярю указатели не понимая, помогите
430 2570255
>>570168

> в сторе


Ты как из реактотреда выбрался?
431 2570288
>>570255
А что не так в том, что я делаю интерфейс сторер-залупанейм и передать его, а не конкретную базейку, я самоучка посоветуйте книг по бекенду
432 2570325
>>570168
Указатель не есть абстрация языка.
Это данный нам свыше механизм адресации http://assembler-code.com/ukazatel-v-programmirovanii/
433 2570338
поинтеры придумали украинцы https://ru.wikipedia.org/wiki/%D0%AE%D1%89%D0%B5%D0%BD%D0%BA%D0%BE,_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0_%D0%9B%D0%BE%D0%B3%D0%B2%D0%B8%D0%BD%D0%BE%D0%B2%D0%BD%D0%B0
это не для русского человека
434 2570881
>>569810
Указатели в пщ мало чем отличаются от ссылок в нормальных языках, разве что больше закорючек писать.
изображение.png89 Кб, 524x567
435 2571264
>>570881

>пщ



есть фотошоп с зайцем ПЦ изучающим Go?
436 2571788
>>510725 (OP)
Парни, ищу стажировку/позицию джуна, я адекватный чел, перекатился с питухона, есть универский бекграунд в области информатики, опыт коммерческой разработки - чуть больше года. Знаю/понимаю стек типичного микросервиса, в целом, если есть любой вариант писать коммерческий код на гошке, оставьте почту, я свяжусь.

Выбора нет, использую все каналы коммуникации. Даже двач, хули. Реальность 2к23
437 2571789
>>571788
Могу в 1с вкатить. Реальность 2к23
438 2571798
>>571789
Ниже планки неинересности/желания терпеть инструмент, к тому же 0 перспектив для меня там где я живу про 1с никто не знает и уж тем более не использует(я не из РФ капчую)

Я подумал, лучше я почту оставлю
j/r~zbazin164ANUSgmPBmailPUNCTUMcg|Com
439 2571801
>>571798
Ты не можешь "терпеть" то, о чём ничего не знаешь. Это как если бы я "терпел" паскаль.
440 2571804
>>571801
С хуев ты про паскаль ничего не знаешь, тебе 0 лет?
441 2571806
>>571801
Общая эрудиция позволяет сразу отказываться от того, что точно мне не интересно, иметь твердые для отказа совершенно не обязательно, достаточно общего представления, при отказе на работу тебе даже не пишут причину, ведь никто не обязан свое НЕТ объяснять. так и тут

>>571804
Двачую.
442 2571808
>>571806

>твердые знания для отказа


быстро фикс.
443 2571813
Ну раз тут уже начали торговать хуйцами, то и я хочу перекотиться из питона в го. Коммерческого опыта именно как питухон-разраб 2 года, ещё 5 лет дата аналитиком, но там чисто етл-скрипты писал с скл, потом уже в бэкенд перекотился.
На предыдущем месте Django/DRF/Ninja, Neo4j, GraphQL, Vue3, MSSQL+MySQL+MongoDB, немножечко Airflow и Nifi.
На текущем месте Flask, gRPC, Redis, PSQL, Gitlab, немножечко React и C# с MinIO
444 2571818
>>571813
Держись за место пока можешь, я даже на питухон разраба ловлю реджекты, недавно пробовал податься, деньги заканчиваются.
Стек Flask, Django, DRF, Psql, Docker, ща стал видеть требования по JS и всяким Vue , React, походу теперь надо быть фуллстеком, нежели простым питухонистом
445 2571823
>>571818
У меня есть накопления, и в принципе без работы с текущими тратами + инфляцией мне хватит на 2+ года, но коплю на свою отдельную недвигу, а прожирать это не хочется. На текущем месте меня вряд ли уволят в ближайшие 2-3 месяца, но у меня уже будет ровно год и я хочу просить прибавку через перформанс ревью, но боюсь его не пройду, т.к. мало чего за последнее время делаю и больше решаю мелкие баги/рефакторю проект, а не развиваюсь.
Хотел переписать grpc-ные сервисы на Go, но свежепришедший архитектор уже решил переписывать все сервисы на rest. А меня уже эти круды заебали.
446 2571848
>>571804
Я знаю паскаль на уровне, на котором ты 1с. Нормальные люди этот уровень называют "ничего".
447 2571852
>>571806

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


Не интересно и "инструмент хуёвый" это два немножко разных понятия, если первое обосновывать действительно не надо, то второе - ещё как.
Я например не могу спиздануть, что паскаль - хуёвый язык, потому что меня сразу попросят обосновать и я жидко умру.
448 2571871
>>571823

>переписать grpc-ные сервисы на Go, но свежепришедший архитектор уже решил переписывать все сервисы на rest


нахуя
449 2571874
>>571852
Айти комьюнити сродни философам, лишь бы доебаться.

>неинересности/желания терпеть инструмент


Я не говорил что он хуевый, я сказал что у меня нет желания его терпеть, читай, нет желания на нем работать, я так давно мог стать Java QA и не ебать себе мозги с Го микросервисами и прочими вещами, мог вот буквально недавно стать Java Trainee , но после Go попытка написать ТУДУ на спринге вызвала у меня горение жопы, даже умолчу о том, что с Java у меня нет проблем, я писал на ней в универе, да и вкатывался с этого языка 3 года назад. Писать веб сервисы на таком я бы точно не хотел, потому что предвижу кол-0во проблем с этим инструментом, а так же , надо нести ответственность за сроки и реализацию, а с ним я этого делать не готов. Можно долго мусолить эту тему, но для меня не достаточно ПРОСТО ПИСАТЬ КОД, мне надо получать моральное удовольствие, чтобы на работу идти с горящими глазами, должна быть заинтересованность. Если ее нету то и результат априори хуевый(в моем случае). Мне не важно, хорошо это плохо. Это то что я прошел на личном опыте и никакие за-против этого уже не исправят
450 2571903
>>571874
Ты рассказываешь про вещи, с которыми ты ИМЕЛ опыт, в качестве аргумента в разговоре о том, с чем ты его не имел, я правильно тебя понимаю? Мне тоже не нравится спринг и не нравится 1с, но между разница в том, что я действительно работал с обоими этими инструментами и могу аргументированно пояснить что и как.
451 2571909
>>571788
Чебля? Просто подайся на вакансию разраба в яндексе/авито/озон/вайлдбериз. Там тебе предложат команды с го.
А по факту какая разница на чем писать? Главное, чтобы челы в команде были сильными разрабами, чтобы было у кого получиться. А язык это хуета по большей части.
452 2571977
>>571871
Ну а как ты думаешь это происходит? Пришел чел, в жизни строчки кода не написал, 4 года работал в йоте, поднимал проект джавовый в роли архитектора, до этого работая кволити менеджером. Пришел в другую мобильную энтерпрайз-порашу, где люди пытались внедрить что-то новое, но ему лень разбираться, он с топами забухал и решил откатить всё на пару лет назад, ибо грпс это говно, а рест заебись.
453 2572268
>>571903
Не обязательно быть грузчиком чтобы не хотеть таскать мешки
>>571909
Не из РФ, озон вроде ок, но алгоритмы после 1 курса универа я не писал.
454 2572276
>>571818

>Flask, Django, DRF


Помойка
455 2572307
>>572268

>Не обязательно быть грузчиком чтобы не хотеть таскать мешки


Про "хотеть" речи не шло в третий раз. Речь шла про "утверждать объективную хуёвость"
image.png59 Кб, 1446x370
456 2572797
Ну какой идиот придумал долгожданные дженерики запихнуть в квадратные скобки?

Как эту парашу читать?
sage 457 2572915
>>572797
Ознакомиться с документацией в Go.
458 2573111
>>572307
ты сам выдумываешь проблемы и сам до них цепляешься. Что ты от меня хочешь? Какой смысл в твоих ответах? Ты тратишь мое время и свое.
459 2573138
>>573111
Я проблему обозначил достаточно чётко - если хочешь, чтобы тебя не трогали, не давай оценочных суждений в областях, в которых несведущ.
Если не хочешь тратить своё время - ну покажи для начала человека, который держит у твоего виска пистолет, заставляя его тратить.
Я только что дал тебе алгоритм решения обеих твоих проблем, дело за малым.
image.png71 Кб, 276x183
460 2573154
>>573138
>>573111
бля ребят
461 2573324
>>572915

>Ознакомиться с документацией


В каком другом языке дженерики через квадратные скобки пишутся?
462 2573380
>>573377 (Del)
Лучше.
463 2573639
>>573380
чем
464 2573725
>>573154
типикал айти специалист, У нас такой был, девопс. Тоже кукарекал про оценочные суждения, то ему не нравится, тут мы НЕ ДОСТАТОЧНО ОБЪЕКТИВНЫ, ВЫ НИ ШАРИТЕ Я ШАРЮ!. Вообще команду раздражал, долго не хотели выкидывать на мороз, терпели. Потом проект отвалился, западный заказчик был
465 2573762
>>573725
Чел, зашейся, тебя это в той же мере касалось
466 2573903
>>573324
Какая разница, что там в других языках? Если нужно узнать про дженерики в Go. читай документацию Go, а не других языков.
467 2573904
>>573639
[] для массивов, а <> для дженериков. Это отличительная черта и не нужно мешать
468 2573966
>>573904
Да ну не, хуёвая придирка. Ты почти никогда не спутаешь массив с дженериками, слишком разные контексты применения. А дальше уже всё зависит от того, на какие символы твои глаза натренировались смотреть.
То есть, наверное уголки были бы самую чуточку легче для восприятия (но опять же: самую-самую, это придирка одного уровня с придиркой к долларам в названиях переменных в php), но оно бы усложнило парсер. Сейчас у символов >< вполне определенный контекст в смысле парсера и поэтому добавление им дополнительной нагрузки добавило бы туда порядочно логики и, возможно, замедлило его. Где-то на гитхабе можно почитать срачи внутри го тим на эту тему.
469 2574026
>>573966
У него только одна придирка: сделано не как в его любимой джаве.
470 2574074
>>573904
ну представь что вызовы функций это лукап в map[type]func(...) или аналогично для типов как если бы были first-class типы
471 2574397
>>574026
Подобная аннотация есть в C# и TypeScript. А это - лучшие языки современности
472 2574403
>>574397
Какая нахуй аннотация? В шарпе и тайпскрипте для дженериков угловые скобки.
473 2574405
>>574403
Так и я говорю, что во всех нормальных языках дженерики сделали уголками. Один косоёбный golang использует квадратные скобки.
D70CB4F4-4AC0-4A75-A0A5-36AF0464FBF5.jpeg279 Кб, 1284x929
474 2574862
>>574405
Scala тоже использует квадратные. Ну и смотрим пикрил
image.png28 Кб, 947x598
475 2576344
Гоферы, почему ваш язык говно?
476 2576382
>>576344
да просто не проверяешь ошибку и всё. получаеш panic: runtime error: invalid memory address or nil pointer dereference и лежиш урчиш довольно
477 2576399
>>576344

>не умеет пользоваться циклом


Ну хуле, вкатун идёт нахуй
478 2576515
>>576399
Ебать ты тупой)
479 2580564
Всем привет! Я гоу программист
480 2580588
Анонче, есть среди тебя те кто прошел миллион курсов по голангу и может зарекомендовать лучший? Ну скиллбокс там или слерм или кто? У кого самый годный курс?
Требуется не адвансед, а чтоб с нуля мне в голову правильно все вложили. Последовательно.
Я самоучка, все по верхам да по верхам.
481 2580592
Насколько я понял, читая тему, что в Go в основном приходят из других языков.
А реально ли в Москве свичнуться хотя бы на джуна Go после многолетнего опыта написания драйверов на чистом C под специфическую ОС?
Или нужен именно опыт работы в бэкенде и мой опыт байтоёбства на C не поможет?
482 2580603
>>580588
Доки
483 2580614
>>580592
Если писал что-то сетевое, то потенциально можно приплести
484 2581215
>>580603
Ты безусловно прав. К докам я прихожу изредка, но только когда какие-то проблемы.
А мне бы хотелось какой-то курс от дяди, который структурированно и постепенно все вложит в голову.
А через доки вот получаются такие как я самоучки с кашей в голове.
485 2581257
>>581215
Дисклеймер - го фановый язык для меня, деньги зарабатываю на другом.
Проблемы такие:
1. Го сам по себе не настолько суперсложный язык, чтобы его рассусоливать
2. Он не оброс экосистемой, чтобы её рассусоливать
3. Он не так давно появился, чтобы к нему появились курсы
Посоветовать тут можно только работать точечно, если у тебя проблемы с системщиной - смотреть туда, в отрыве от языка, если с языком - читнуть книг и посмотреть репозитории с кучей звёзд. А других вариантов особо-то и нет.
486 2581259
>>581257
Месседж понял, спасибо.
487 2582223
>>581257

> 2. Он не оброс экосистемой, чтобы её рассусоливать


Экосистема есть и вполне себе неплохая. Просто подход другой, в го не приняты фреймворки и ты сам собираешь себе проект из маленьких либ, в отличие от php, где ты бахнул ларавел и всё.
Но все кирпичики уже написаны, спокойно берешь logrus, pgx, sqlboiler, goose, kafka-go и что там ещё тебе нужно - и погнали. Новичку чуть сложнее, так как он не знает, чего брать.

> 3. Он не так давно появился, чтобы к нему появились курсы


Я тут недавно пытался найти курсы для родственника, так вот: хороших курсов не существует в принципе. Все скиллбоксы, яндекс-практимумы и хекслеты - это примерно одинаковый трешняк. Поэтому нет и не надо, хочешь изучать - берешь и сам гуглишь статьи, мануалы, примеры и пытаешься повторить, ничего лучше ещё не придумали.
488 2582597
>>582223

> Просто подход другой, в го не приняты фреймворки


Нипонел а как же джины и гормы? Хотя джин ещё непонятно корректно ли ОСТНАСТКОЙ называть, учитывая что это выглядит как просто небольшой слой абстракции над стандартными примитивами.

>Поэтому нет и не надо, хочешь изучать - берешь и сам гуглишь статьи, мануалы, примеры и пытаешься повторить, ничего лучше ещё не придумали.


Это да, но к го это применимо в квадрате. Если в джаве хороших курсов не существует, то в го и плохих не существует.
489 2582909
>>582597

> джины


Далеко не самая популярная штука, хотя и часто встречается. Труъ вей это взять роутер, какой понадобится, валидатор, какой понравится и тд и тп.

> гормы?


Вот сейчас серьезно и неиронично: горм это самое плохое, что ты можешь втащить в проект. Он хуево сделан, обладает кучей опасных особенностей и при этом ещё и не подходит к го идеологически.
Ни на одном серьезном проекте ты его не встретишь, максимум в виде легаси. И любой серьезный гошник скривится, когда его услышит.
Большое количество звездочек у него это в 99% джуны-воннаби гошники и результат пиара. Ну или перекатуны с джавы, которые по привычке пишут golang orm и потом используют первое, что выскочило.

> Это да, но к го это применимо в квадрате. Если в джаве хороших курсов не существует, то в го и плохих не существует.


Так если никаких хороших не существует, то зачем тебе вообще нужны плохие? Не используй вообще никакие.
490 2583372
>>582909

>Не используй вообще никакие.


Я лично и не использую. Но то, что говно делится на сорта - всё же наблюдаю.
491 2583805
>>583372
Да ну не делится оно.. Наверное теоретически можно что-то вынести из курсов. Из чего угодно можно.
Только соотношение вложенных усилий и вообще ресурсов к результату будет крайне неудачным.

Поэтому моё мнение всё ещё такое, что кто хочет что-то изучить - то выбора у него особо и нет, интернет, статьи, книги, мануалы, официальные example project и ответы в чатиках и на дваче опасно, многовато авторитетных джунов.

Не говоря уже о том, что курсы это как правило неудачный разрозненный копипаст хелловорлдов сомнительной давности. А их "менторы" это зачастую те, кто не смог стать нормальным разработчиком. По очевидной причине - зп "ментора" на порядки ниже зп хорошего разработчика.
492 2584702
Какие подводные камни у вендоринга зависимостей? Мне кажется это просто имба, когда вижу папочку vendor сразу понимаю что с билдом никаких проблем не будет. Но почему это не юзают повсеместно?
493 2584824
>>584702
Репозиторий разбухает как на дрожжах, особенно когда микрописечная архитектура и у тебя 50+ репозиториев с практически одинаковыми зависимостями. Да и в го.мод и так конкретная версия указана, всегда можно подтянуть нужную версию
494 2584876
>>584702
Это просто не нужно, в go.mod лежат как названия и хеши коммитов, так и чексуммы самих зависимостей. Так что ты в следующий раз получишь ровно те же файлы, что и в прошлый раз, гарантированно.
При этом:
1) Не увеличивается вес репозитория, а качать много метров или даже гигов кода никто не любит; Особенно он увеличится, если ему придется хранить все версии всех используемых либ, а ему придется это делать, если ты будешь их обновлять.
2) Go mod периспользуются между разными проектами, в итоге оно не сжирает у тебя место в системе. Можешь посмотреть в качестве примера на nodejs, где ты в трех сервисах сделал npm install и у тебя количество занятого места в системе резко выросло гигов на пятнадцать; Хотя могло бы всего на 3 хотя и это пиздец
3) Скрывает ненужный дифф в реквестах, показывая только реально изменившиеся файлы в текущем проекте. Изменения внешних либ как правило не важны, так как мало кто прям досконально их смотрит. Обычно ченджлог глянули, убедились, что апи не изменилось - и нормально будет.
4) Так все делают, что ты как маленький.
495 2584992
Вот кстати, про вендоринг, да. Я немного на питоне скриптил. Есть там удобная штука venv. Ну т.е. под каждый проект свои зависимости в вирт окружении. Вы знаете.
А в го, я так понял, подход другой? У нас есть хома, в которой один воркспейс go и в нем хранятся все модули? Т.е. не важно где у тебя репозиторий в системен находится, зависимости всегда качаются в ~/go/pkg?
А есть возможность создавать вирт окружения на каждый новый проект? Хочу питон-вэй.
Или поясните почему это мне не надо.
496 2585010
>>584992
В голанге парадигма пакетного программироования. Один пакет, одгт модули. Все пакеты потом в докер пакуются.
497 2585684
Есть что-нибудь, типа книг, мануалов на языке для работы с поиском, чтением и записью памяти процессов? Что-нибудь не громоздкое. В треде для нюфагов посоветовали книгу на 1000 страниц с рассмотрением симбиана, юникса и хобби автора. Ну вы поняли.
498 2586028
Я хуй пойму,пакеты в го это как классы в джаве или как нормальные пакеты? Почему к методу обращаются именно через пакет,а не через класс?
499 2586116
>>584992
Тебе в го не нужно виртуальное отображение, у тебя все зависимости вообще всех версий для всех проектов кладутся в одну папку, ~/go/pkg, да - и соответственно каждый возьмет ту зависимость, что ему нужна (указана в go.mod).

Всякие питоновые venv'ы - это всё костыли, порожденные изначальной неприспособленностью питона к поддержанию разных зависмостей на одной машине.

Упрощенно говоря, у тебя есть либа А, которая хочет С версии 1 и либа Б, которая хочет С версии 2.
В питоне это будет жопа, потому что питон хранит их в системе просто как "либа А, либа Б, либа С" и не умеет поддерживать в системе раздельно "либа С1, либа С2", без venv и прочего.
В го в системе все пакеты изначально лежат в виде /пакет/версия:
/А/1 (хочет /C/1)
/Б/1 (хочет /C/2)
/С/1
/C/2
Так что такой проблемы в принципе нет, го решает её из коробки.
500 2586123
>>586028

>Почему к методу обращаются именно через пакет,а не через класс?


нет такого. ни "методов" у пакет, ни "классов".
если обращаются через пакет, то это не метод, а функция. к методу обращаются через тип или через объект.

u := &url.URL{}
u.Query() // через объект
(*url.URL).Query(u) // через тип
501 2586128
>>586028
Пакеты в го = либы, то есть, нормальные пакеты.
Правило потому что такое, чтобы не создавать ненужных коллизий. Проблем с этом не возникает, просто вопрос привычки.

> к методу обращаются именно через пакет,а не через класс?


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

import "some/packagename"

func foo() {
classObj := packagename.Class{}
classObj.Method()
}

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

type S struct {}

func (_ S) PseudoStatic() {
// do anything
}

func bar() {
(
S)(nil).PseudoStatic() // стильный вариант

var s *S
s.PseudoStatic() // джуновый вариант
}
501 2586128
>>586028
Пакеты в го = либы, то есть, нормальные пакеты.
Правило потому что такое, чтобы не создавать ненужных коллизий. Проблем с этом не возникает, просто вопрос привычки.

> к методу обращаются именно через пакет,а не через класс?


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

import "some/packagename"

func foo() {
classObj := packagename.Class{}
classObj.Method()
}

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

type S struct {}

func (_ S) PseudoStatic() {
// do anything
}

func bar() {
(
S)(nil).PseudoStatic() // стильный вариант

var s *S
s.PseudoStatic() // джуновый вариант
}
502 2586130
>>586128
Фикс второго кода, который пожрал двач, который до сих пор не умеет в нормальный маркдаун с блоками кода: https://go.dev/play/p/iJ88VOOXnhu
503 2586136
>>584702
экономящие на байтах буратины. им еще так и хочется навернуть побольше дикой хуиты, чисто чтобы обыграть удаление вендора. например чтобы твой билд в докере лез наружу в какой-то кеш пакетов, чтобы не перекачивать зависимости каждый раз и т.п.

нормальные люди всё вендоряд, а сэкономленное время билда уделяют ревью кода зависимостей, который обновился, чтобы не завезти себе лишние баги и уязвимости.
504 2586150
>>586128
Я правильно понял что в го структуры это аналог классов? То есть в пакете лежат структуры,в структурах методы функции. И чтобы обратиться к функции нужно сделать пакет.функция а не пакет.структура.функция?
505 2586217
>>585010
>>586116
Да, аноны, это я все понимаю. Как он хранит свои модули, как хранит питон, какие проблемы и прочее.
Я к тому и спрашивал - мол, правильно ли я понимаю и не ищу ли какое-то второе дно. Похоже, не ищу и готовлю го более-менее правильно. Но это как-то пиздец как непривычно. После питония осталось четкое хотенье своего воркспейса в любом месте в системе со всеми зависимостями и самодостаточного. А в го у тебя твой проект в 20 вложенных каталогах ходит за модулями и настройками в ~/go/
Просто не привычно.
В любом случае, спасибо за разъяснение.
506 2586218
>>586217
Наоборот, ищу блять. Но теперь перестану.
507 2586530
>>586150

> Я правильно понял что в го структуры это аналог классов?


Не совсем. Структуры в го похожи на структуры в С. От классов там только возможность задавать публичность/приватность. Методы в го можно сделать вообще для любого типа, включая примитивные, вроде int и bool, контейнеры, например slice (net.IP) и map (url.Values)

>>586028
Пакет это аналог неймспейса из плюсов или шарпа.
Методы в го это штука довольно условная, с механизмом похожим на то как работают методы в питоне - т.е. это функция, у которой первым аргументом идет сам объект. Фактически вызов метода это вызов каррированной функции

>>586128
Статические методы это костыль в языках в которых нет функций и разработчика заставляют ебаться в классы. В го чем-то отдаленным аналогом является вызов функции через тип, например (*S).PseudoStatic(nil). Зачем вообще ввели такой синтаксис я не знаю, единственное где оно выглядит некостыльно - это аргумент для финалайзера https://go.dev/play/p/21xgE0obfnf
В общем просто используйте обычные функции в таких случаях.
Всякие "псевдостатические методы", где на деле просто игнорируется ссылка на инстанс или копия если ресивер не поинтер но он есть это, по сути, не статические методы. Но они тоже бывают нужны, например для имплементации интерфейса объектом без состояния https://cs.opensource.google/go/go/+/refs/tags/go1.19.5:src/io/io.go;l=592
508 2586543
>>586136
Двачу докер. Кроме того через вендор проще патчить зависимости. У меня на одном из проектов есть makefile target dependency:
@go mod tidy && go mod vendor && git apply patches/fix_hui_govna.patch
509 2586593
>>586530
Окей спасибо,покопаю поглубже. Пока нравится что язык довольно немногословный и по ощущениям учится очень быстро. С другой стороны печалит что мало информации о кишках
510 2587120
>>586593

> язык довольно немногословный


Вот это неправда, го многословнее других языков. Если ты не согласен, то просто не сталкивался с местными приколами, тут очень много всего нужно делать явно, что является го вей (и за что го многим не нравится).

К примеру, у тебя есть var iarr []int, а тебе нужен []int64. Что ты сделаешь?
В каком-нибудь другом языке ты можешь сделать i64arr := []int64(iarr) и всё, проблема решена.
В го же тебе придется прям вручную пересобирать слайс:
i64arr := make([]int64, len(iarr))
for i := range iarr {
i64arr = int64(iarr)
}
511 2587125
>>587120
Я думаю он имел в виду бедный лексикон.
512 2587234
>>587120
Я имел ввиду что в языке мало ключевых слов,да и возможностей в целом. Первым делом загуглил есть ли в го аналог листа из жабы,говорят используй слайсы. Плюс довольно странно что функция len() возвращает количество байт,а не количество символов. Не представляю зачем мне может понадобиться знать количество байт. Также у меня есть предположение,что го разработчики имеют в запасе кучу написанных вручную оберток и тупо переиспользуют их в проектах. Уже предвкушаю как буду писать ArrayList вручную. Но это в общем то не доеб,а чисто наблюдение. Каким бы не был язык,работает быстро,да и писать вроде достаточно просто,а это главное
513 2587343
Чому резко стало дохуя вакансий на голанге с большими зпшками? Я, сишарп макака, уже завистливо поглядываю налево, так как сишарп в РФ занимает гордое место у параши
514 2587346
>>587234

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


Ага, все списки в го только через слайсы. Есть ещё container/list, но это что-то скорее для собесов, в реальности практически не видел использований.

> Плюс довольно странно что функция len() возвращает количество байт,а не количество символов.


Зависит от контекста. В случае len(slice) - это будет длина слайса, в смысле количества итемов, то есть то, что надо.
В случае len(string) - да, вернет байты. Но там вообще непонятно, что ты хочешь посчитать. Со строками всегда всё сложно, есть к примеру юникод, где один символ может состоять из множества глифов. Пойди разбери, что для тебя "длина" в данном конкретном случае. И да, если тебе нужна прям длина строки в юникоде, или конверти string в слайс рун []rune и уже смотри его длину.
len(string)=bytes же нужно для байтоебства и всяких низкоуровневых оптимизаций. Это тебе не джава, привыкай :)

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


Неа, в целом в случае со слайсом ты почти всё можешь сам делать руками. https://github.com/golang/go/wiki/SliceTricks в помощь, если на память не помнишь чего то.
515 2587370
>>587346
Спасибо добрый анон за развернутый ответ
516 2587371
Если в функцию передать слайс или массив и что-то с ним сделать изменится ли исходный массив. Говоря по русски в функцию передается копия массива/слайса или же сам массив/слайс?
517 2587617
ссылки в го и с++ не одно и то же?
518 2587703
>>587234

> Уже предвкушаю как буду писать ArrayList вручную.


Чем тебя слайс не устроил? С дженериками много ебли в слайсы стало возможно вынести в отдельный универсальный пакет, например https://pkg.go.dev/golang.org/x/exp/slices, может тебе проще будет просто сделать что-то подобное под свои нужды?
519 2587710
>>587371
подумай почему append возвращает слайс и нельзя сделать тупо append(s, 123).

слайс это структ с поинтером на начало массива. при передаче в функцию создается копия этого структа. т.е копия len, cap и поинтера. если ты будешь менять какие-то поля (аппенд, например, может поменять все три), то из функции тебе нужно будет его вернуть. а если тупо будешь менять элементы в массиве, то не нужно.
520 2587718
>>587617
В плюсах есть pointer и reference. Первое во многом похоже на то что есть в го, а аналога второму - нет.
>>587371
Массив копируется в функцию, т.е. изменения элементов не видны наружу. У слайсов, мап и каналов такого не происходит
521 2588320
>>586593

>язык довольно немногословный


нервный смех
522 2588623
>>588320
Всё так.
В языке есть только бе и ме, и ты этими бе и ме должен выражать системы арбитрарной сложности. Ессно на выходе получается что-то вроде
KoKoKoKoKoKoKoKoKoKo Kud-Kudah
KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah
523 2588715
Структуры это просто набор полей чи да? Класс без методов
524 2588879
>>588715
Всё так. Методы можно к любому типу прикрутить
525 2588883
Завтра собеседования на миддла(сам оцениваюсь посредине, между джуном и)
Пока что дрючу https://www.practical-go-lessons.com
Помимо очевидного "к чему ещё готовиться" вопроса, интересно ещё, нужно ли зубрить базовые методы и синтаксис?
Многое забыл, и если нужно что-то, обычно открываю cheatsheet.
526 2589533
>>588883
ну допустим такое
из чего состоит слайс, как работает append, что такое мапа и что за load factor, что такое интерфейс
почему горутины легче тредов, размер стека по сравнению с тредом ОС, какие есть точки переключения горутин, кооперативность шедулера, повесим ли мы всю программу если поставим GOMAXPROCS=1 и зайдем в tight loop, как обрабатываются блокирующие/неблокирующие системные вызовы, что такое нетполлер и на чем он основан, как стеки горутин аллоцируются и почему они фактически бесконечные
фазы гц, зачем нужны остановки мира и зачем нужен write barrier
че там в пакете sync, как реализованы каналы, быстрее ли канал мютекса, в каком порядке селект выбирает каналы, че за атомики и как они реализованы
что такое контекст и для чего используется
527 2589795
>>589533
Спрашивали про:

>из чего состоит слайс


>что такое интерфейс и про ООП в го


>горутина vs тред vs процесс. Обмен данными между ними(proc-to-proc etc)


>какие есть точки переключения горутин


Про само устройство шедулера.
Описание и примеры проблем с горутинами и как они решаются.
В качестве задачи был факториал, который потом попросили ускорить [с горутинами].

На половине из этого зафейлился.
Спрашивали больше, но это запомнилось и было тобою упомянуто.
Кейворды, которые буду гуглить: NSQ, netconf, gorm xorm burm, b3 tree.
528 2589903
>>589795

> gorm


«Горм не нужен» — говорили они, «го это вообще не про ORM» — говорили они
529 2589973
>>589795

>> b3 tree


проиграл
530 2589979
>>587718

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


нет
531 2590118
>>589979
мне кажется этот челик не про массив внутри слайса говорит
https://go.dev/play/p/t2siBRvwV22
532 2591130
533 2591887
>>589979
Пидора ответ
534 2593564
https://go.dev/tour/moretypes/4

Это я тупой или составители примера?
Почему вместо 0x1e9 написали 1e9 и в результате печатается {1000000000 2} ?
Или в этом примере есть какой-то тайный смысл?
Кстати, откуда берётся 1000000000?
535 2593726
>>593564
Ты шиз? 1е9 значит 1 и 9 нулей
536 2593876
>>593726
Я сишник просто, вот и подумал, что опечатка:)
537 2594573
Кто-то по поводу курсов тут спрашивал, что скажете про эти: https://practicum.yandex.ru/go-advanced
И есть ли где-либо в природе сливы оттуда? Хотя бы "проектов", которые они там предлагают сделать.
538 2594786
>>510725 (OP)

> смеемся с залетных крестоносцев


Я тут, шалом алейкум. Хочу, чтобы вместе с бэком на Го в одном проекте была Webassembly библиотека на сишечке, собранная GNU make-ом. Можно как-то сделать так, чтобы одним из шагов go build был вызов make? Насколько вообще распространены мультиязыковые проекты на Го - скажем, c фронтом и его линтерами, обфускаторами и так далее, упаковываемым в бинарник бэкенда?
539 2594799
>>594786
Нет, с go build нельзя, но можно собирать через go generate
540 2595009
>>594786

>чтобы одним из шагов go build был вызов make


а может лудше наоборот
541 2597627
Гоферы, вы там сумасшедшие что ли все? Публичность/приватность функции определяется по заглавной букве, как вообще до такой шизы можно было додуматься?
542 2597629
Хотя что-то в этом есть, можно по имени функции сразу понять, можно ли её вызывать из другого модуля.
543 2597630
Я бы тогда ещё впилил обязательную венгерскую нотацию. К примеру если объявил интовую переменную, то обязан добавить префикс i, иначе не скомпилируется. Для строк префикс s, для поинтера p и так далее.
544 2597632
>>597630
Вроде есть что-то типа негласного хорошего тона, что если функция вызывает панику, то она начинается на Must
545 2597673
>>597627
Ты рофлишь это база чуть ли не из семидесятых годов, только тогда прогеры сами эту нотацию юзали чтобы отличить локальное от нелокального, а теперь это возведено в правило.
Т.е. не знаю как до такой шизы можно было додуматься, но додумались до неё до того как твои мама и папа познакомились.
546 2598090
>>597632
Только в 2к23-м это не нужно, по тому что можно написать свою функцию must всё равно вне main пакета её нельзя использовать

func must[T any](val T, err error) T {
check(err)
return val
}

func check(err error) {
if err != nil {
panic(err)
}
}

И использование что-то типо такого:

func main() {
file := must(os.Create("/tmp/hui.gv"))
defer file.Close()
}
547 2598092
>>597630
заглавная буква позволяет обойтись без дополнительного кейворда уровня export совсем, а это функционально не заменит указание возвращаемых типов
548 2598094
>>598092
невермайнд, я подумал што анон ебнутый и в название функций еще предлагает добавить
549 2598372
Подскажите, а почему оно пишет вот здесь https://go.dev/play/p/nTh6Zit556Z
"./prog.go:8:14: cannot convert t1 (variable of type T1 constrained by any) to type T2"
Можно как-то это решить? T2~T1 тоже не проходит.
Я вообще вообще могу написать дженерик функцию, которая конвертить сходные примитивные типы один в другой?
Если не могу, то го - говно и ваши дженерики нихуя не решают проблем языка
550 2598431
>>598372
Твоя проблема в том что ты не понимаешь сути констрентов.
Ты не можешь взять любой тип и привести его в любой (другой?) тип. В общем случае ты можешь только ~T тильда Т привести к Т
Но если тебе нужно не вообще, а именно между числами, что имеет смысл - то и создай себе констрент который будет включать все числа кроме комплексных и конвертируй себе на здоровье

https://go.dev/play/p/kwVNSsnoJcp
551 2601970
>>598431
Я не хочу только между числами, я хочу функцию, которая позволяет конвертить просто слайс одних типов в слайс других, если эти типы вообще конвертируемы. Числа здесь это частный случай.
552 2602971
>>598431
>>601970
Хотя впрочем хуй даже с ними со слайсами.
Я хочу просто универсальную дженерик функцию конверсии:

func convert[T1 any, T2 any](t1 T1) T2 {
return T2(t1)
}

Как я могу её написать?

https://go.dev/play/p/fGF0e71N93p ругается
553 2603785
>>602971

>а давайте сделаем функцию которая делает T1(t2) чтобы вместо того чтобы писать T1(t2) мы могли писать t1 := convert[T1,T2](t2)


нахуя блять далбоеб
554 2604056
>>603785
Потому что блять в го нельзя конвертить один слайс в другой, долбоеб, я об этом одним сообщением выше написал.
У тебя одна функция возвращает []int64, а другая требует []int32.
И тебе нужно руками создавать новый слайс и заполнять его значениями. Хочется написать одну дженерик функцию для этого, вместо того, чтобы постоянно копипастить этот код.
555 2604275
>>604056
ну нельзя блять
556 2604448
>>604275
Тогда ваш го говно, десять лет пытались добавить в язык дженерики и когда добавили, блять, выясняется, что они не покрывают ну самые очевидные ситуации.
557 2609171
>>604448
ну чтобы добавить ([]int32)([]int64{}) женерики особо не нужны. если бы хотели, добавили так же, как недавние каст массива в слайс и наоборот.
558 2609376
Гугл решил монетизироваться путём добавления в go ещё большей телеметрии https://github.com/golang/go/discussions/58409

Комментарии всех недовольных там жёстко удаляют.
559 2609970
>>609376

>Комментарии всех недовольных там жёстко удаляют.


>первый коммент Should be off by default


>ниже Now you guys want to introduce telemetry into your programming language? This is how you drive off any person who even considered giving your project a chance despite the warning signs


ну кажется все точки зрения там есть. нахуй нужен однообразный спам недовольных? пусть ставят эмоджы, их не удаляют.
560 2613005
Берут ли на работу джунов гоферов или надо обязательно быть миддлом на другом стеке, чтобы перейти на голанг?
561 2613313
>>613005
Берут, по-крайней мере, мы брали пару лет назад. Сейчас хз что на рынке происходит, лично мы вообще найм прикрыли финтех.
562 2613496
В каком типе данных хранят деньги? Разработчики зачем-то запихали тип для комплексных чисел, а для денег добавить забыли.
563 2613552
>>613496
В BigInteger

>Разработчики зачем-то запихали тип для комплексных чисел


Этож гугол
564 2613807
>>613496
Вот в этом храни https://github.com/shopspring/decimal
Поддерживает бд и хранит их правильно, его же используют всякие финтехи и интернет магазины (shopify)
565 2615339
Катимся, гофятки!

>>2614678 (OP)
>>2614678 (OP)
>>2614678 (OP)
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 24 марта 2023 года.

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

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