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

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

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

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

"Небольшая конфа треда" - мертва? Последний раз добавляли ссылку год назад.

Прошлый тред: >>3262042 (OP)
2 3308410
Аноны, пилите прохладные про первую работу на го
3 3308422
Ахахах, че за си-стайл поделка? Выглядит как язык для детей.
4 3308445
>>3308189 →

> Пацаны, поясните за обработку ошибок. Там выше кто-то уже спрашивал, но мне кажется тема ерроров осталась нераскрыта.


>


>Допустим у меня http обработчик сидит в самом верху, дергает метод из пакета (будем считать для простоты, что у меня 1 application layer = 1 пакет) А, тот дергает метод из пакета В, тот дергает метод из пакета С. Каждый из пакетов имеет свою структуру для ошибок: ErrorA, ErrorB, ErrorC, которые я могу набивать всяким полезным контекстом, чтоб потом его высрать в тело респонса жсоном. Собственно два вопроса:


>


>1. Как лучше сделать: чтобы пакет B при получении ErrorC оборачивал ее дополнительно своей ErrorB? Или ErrorB -- это чисто ошибки, относящиеся к самому пакету В? В первом случае вроде получается чето более-менее похожее на нормальный стектрейс, если у всех ошибок будет допустим какое-то поле Cause error, но тогда наверху у меня всегда будут только ошибки ErrorA, и если мне нужно разное поделать в зависимости от того, что же там за real cause была -- будет неудобно. Во втором случае стектрейса никакого нахуй нет, как такие ошибки например логгировать с пользой -- непонятно, но код проверки ошибок в обработчике становится хотя бы поприятнее.


>


>2. В обоих этих случаях выходит так, что обработчик должен быть в курсе обо всех ошибках, которые могут произойти во всем ебаном приложении, то есть он должен знать и про ErrorA, и про ErrorB, и про ErrorC. Чето я слабо себе представляю, как такой подход будет скейлиться, если аппка становится хоть сколько-то большой (ну там на пару десятков эндпоинтов хотя бы). Какие есть альтернативные варианты? Я сам чето ничего не надумал более умного.



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

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

В общем нужны примеры как с этой хуйней бороться. Ну и то же самое с ошибками от репозитория. Тоже несколько структур заводить? И каждую из них потом обратабывать сначала в сервисе, а потом в контроллере? Тяжело....
4 3308445
>>3308189 →

> Пацаны, поясните за обработку ошибок. Там выше кто-то уже спрашивал, но мне кажется тема ерроров осталась нераскрыта.


>


>Допустим у меня http обработчик сидит в самом верху, дергает метод из пакета (будем считать для простоты, что у меня 1 application layer = 1 пакет) А, тот дергает метод из пакета В, тот дергает метод из пакета С. Каждый из пакетов имеет свою структуру для ошибок: ErrorA, ErrorB, ErrorC, которые я могу набивать всяким полезным контекстом, чтоб потом его высрать в тело респонса жсоном. Собственно два вопроса:


>


>1. Как лучше сделать: чтобы пакет B при получении ErrorC оборачивал ее дополнительно своей ErrorB? Или ErrorB -- это чисто ошибки, относящиеся к самому пакету В? В первом случае вроде получается чето более-менее похожее на нормальный стектрейс, если у всех ошибок будет допустим какое-то поле Cause error, но тогда наверху у меня всегда будут только ошибки ErrorA, и если мне нужно разное поделать в зависимости от того, что же там за real cause была -- будет неудобно. Во втором случае стектрейса никакого нахуй нет, как такие ошибки например логгировать с пользой -- непонятно, но код проверки ошибок в обработчике становится хотя бы поприятнее.


>


>2. В обоих этих случаях выходит так, что обработчик должен быть в курсе обо всех ошибках, которые могут произойти во всем ебаном приложении, то есть он должен знать и про ErrorA, и про ErrorB, и про ErrorC. Чето я слабо себе представляю, как такой подход будет скейлиться, если аппка становится хоть сколько-то большой (ну там на пару десятков эндпоинтов хотя бы). Какие есть альтернативные варианты? Я сам чето ничего не надумал более умного.



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

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

В общем нужны примеры как с этой хуйней бороться. Ну и то же самое с ошибками от репозитория. Тоже несколько структур заводить? И каждую из них потом обратабывать сначала в сервисе, а потом в контроллере? Тяжело....
5 3308469
>>08445
Мимо прохожу, интересуюсь, а задача на каком то из верхних уровней тут ошибку разбирать или что?
Я работал в проекте где с нижнего уровня ошибка заворачивалась в fmt.Errorf("some_func error: %v", err)
Получался такой вот импровизированный стектрейс, а на верхнем уровне перед отдачей ошибки в response это приводилось к единой структуре ошибки
type ResponseError struct {
ExternalCode int32
InternalCode int32
ExternalDescription string
InternalDescription string
IsTemporary bool
}
По InternalCode быстро находилось верхняя точка косяка, а далее по описанию ошибки разбираем в чем проблема
По ощущениям для средних проектов хватает, дальше это можно будет улучшить через Wrap и тп
6 3308490
>>08295 (OP)
Просто мимо треда шел, но увидел третью пикчу...
А за что что вы того розового узкоглазого хомяка аж огнеметом палите? Это маскот какого-то очень очень кривоуебищного пакета в го вашем?
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
7 3308496
>>08410
Хорошая работа была. Если бы сейчас там работал, 300к бы получал в месяц, пипец.

>>08422
Откуда ты вылез..
8 3308513
>>08469

>на верхнем уровне перед отдачей ошибки в response это приводилось к единой структуре ошибки


Разверни чуть подробнее, каким образом вы выхлоп Error() приводили к этой структуре? Или респонс код и прочее сказу зашивали на этапе выброса первичной ошибки?
image.png987 Кб, 600x766
9 3308561
Человек-эксепшен на месте!
10 3308653
Лучший тред про лучший язык
11 3308662
>>08490

>Это маскот какого-то очень очень кривоуебищного пакета в го вашем?


То есть каждого пакета как и языка в принципе?
12 3308767
>>08513
Просто записывали в InternalDescription
Так как нам от ошибки ничего большего, чем стектрейс через строки и internal сode для быстрого нахождения косяка на верхних уровнях, не было нужно, то мы просто написали пачку конструкторов для разных http статусов (которые ExternalCode)
13 3309075
>>08767
Ну я это представляю так, что как минимум у меня могут быть ошибки клиента, и могут быть мои серверные ошибки. Ошибки клиента я хочу НЕ логгировать, резолвить в подходящий 4xx код и возвращать жсоном с мессаджем и какими-то полями; ошибки сервера я наоборот хочу логгировать, резолвить в 500, клиенту отдавать либо тоже что-то кастомное, либо дефолтное "что-то пошло не так", а в лог писать стектрейс и опять же какой-то контекст ошибки. При этом контекст ошибки может собираться и из контекстов обернутых ошибок
17018549163750.jpg657 Кб, 1080x1350
14 3309242
>>3308257 →
Пошел нахуй, пидар
Снимок экрана 2024-10-28 092729.png157 Кб, 1750x918
15 3309271
>>09075
Я на своем проекте пришел к такому костылю. Не знаю насколько правильно, но структура вот такая. Дальше в логгере я сохраняю Internal, а юзеру отдаю Message (который чаще всего либо стринга, либо массив с набором ошибок)
16 3309277
>>09075
Вот там в структуре есть поле ExternalDescription для юзверя и Internal для логов, такая же идея и в >>09271
17 3309415
>>09271
Стектрейс бы ещё прикреплять
18 3310353
>>09271
>>09277
>>09415
Чёт мне кажется го не для того дизайнился.
19 3310397
>>10353
А для чего он дизайнился, для перфокарт? Эксепшены в 2024 году - это общепризнанная фича, очень удобно бросить и поймать где-то наверху, а не засирать код err != nill после каждого вызова.
20 3310423
>>10397
Для замены инфраструктурных сервисов на гуглостайловом плюсоговне, а не для джава тырпрайза с джейсонами и исключенияи?
21 3310782
>>10423
@
Дедам дали волю наговнить свою мечту из 70х годов, написать свой си
@
Деды продали идею гуглу, что сделают простой си, что даже самый тупой сможет на нем писать как плюсовик +30 лет стажа.
@
Как это бывает, фантазий на новый язык было только на какие-то базовые вещи, остальное пришлось прикрутить наспех и необдуманно ибо деды умеют мечтать, а проектировать языки не умеют.
@
Идею что даже самый тупой будет писать на уровне бородатого плюсовика попытались продать кабану
@
Но что-то пошло не так
@
Теперь рынке требуются только бородатые гошники, из-за дефицита ценник как у кобола.
@
Джуны стоят внизу и облизываются.
@
Гошники на перегонки косплеят эксепшены, костылят кодогенирацию, радуются бойлерплейтам.
22 3310899
1. Какая у вас мотивация вката в го? Бабло?
2. Что вообще на гошке пишут?
3. Как ситуация с джунами?
23 3310904
>>10899
съеби, вкат закрыт
24 3310908
>>10899
Да.
Всё пишут, любой веб и всё, что связано с облаками.
Джуны не нужны. Вообще нахуй не нужны, вкат только на мидла.
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif1,3 Мб, 350x350
sage 25 3310926
>>10899
1. Когда начинал - выбирал язык для своего проекта, на бабло вообще не смотрел.
2. Бэкенды к чему угодно.
3. Если они программисты из-за денег - наверно, им сложно.
26 3310938
>>10926

>для своего проекта


Ты сервис какой-то пилишь? Уже работал до этого прогером или имел опыт прогерства? Устроился на работу?
27 3311072
>>10899
1. Пока работа в бигтехе. Накапает опыт в резюме и съебу нахуй
2. Микросервисы в основном
3. Джунов на го не существует, кроме выпускников ВУЗов в бигехах. Все гошники - перекатыши из пыхи и джавы
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
28 3311346
>>10938
Не, делал игру-бродилку тогда, давно было. Опыта всякого имел, но на тот момент ещё не работал - на этом языке первую работу и нашёл. С тех пор устраивался неоднократно.

>>11072

>Все гошники - перекатыши из пыхи и джавы


Ну, может так было лет 5-7 назад, сейчас вряд ли.
29 3311466
Начал учить го и появились вопросы:
А че вы трай кетч вырезали к фигам, да и throw тоже? Вас не задолбало писать if err != nil { log }?
Почему вместо while loop используется for ? Честно, очень путает

Пока что это все вопросы, но они не дают покоя. Вчера плохо спал т.к. думал над этими "гениальными" решениями
30 3311516
>>11466
Потому что try/catch это goto, скрытый, с неявным назначением, запутыванием стектрейса, обработкой ошибок в другой части кода.
Всё от минимализма, и всё понятно, если узнать, что Го делали во многом те же люди, что работали над С. Ну и в целом многие вопросы по гошке отваливаются сами собой, если есть знание чистого си.
31 3311556
>>11466

> Почему вместо while loop используется for ? Честно, очень путает


А че с этим не так, просто вместо while пишешь for и все
32 3311610
>>10782
Как замена https://google.github.io/styleguide/cppguide.html для всяких сетевых штук, которых надо писать посто дохуя, го заебись и решает задачи. А то, что там веб-макаки начали го засовывать во все дыры - это уже не проблема дезигна.
Т.е. вот это пишут на говне https://github.com/XTLS/Xray-core и им заебись
33 3311707
>>11610
Ну то есть го нужен для 1.5 сетевых утилит в гигакорпорациях уровня Гугла и Яндекса?
34 3311770
>>11610
Там уже подрачивают на раст (мне лень искать статью), походу го ждет судьба дарта.
35 3311858
А есть у вас какие то предпочтения по библиотекам которые вы используете в каждом проекте? Ну как некий стандарт, чтобы не переизобретать колесо? Может worker pool, errgroup, какие то ещё штуки? Может ent какой.

Пока я смотрю на го и ощущение что все кроме фреймворка (echo, gin) пишется с нуля используя stdlib. Да и фреймворки судя по реддиту тоже не любят.
36 3311950
>>11858

>все кроме фреймворка (echo, gin) пишется с нуля используя stdlib


Стандартной библиотеки за глаза.
Лучший язык как никак
37 3311975
В Гугле Go это замена Python для SRE. Для написания инфраструктуры - C++, приложений - Java/C++.
38 3312007
>>11858
Из того что сразу в голову приходит:
В го нет нормального стектрейса в стандартной либе . Мне нравиться emperror.
Нечто более специфичное но мне нравится- grpc-gateway вместо веб фреймворка. Генерит сразу реверс прокси, сваггер, ну и протобуфные штуки. Кайф короче
39 3312011
Чото не кликает у меня в голове голанг. Не понимаю, как писать, чтобы в итоге не получалось какое-то месиво. Из того, что прям вызывает максимальное отторжение:

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

- Отсутствие нормальных неймспейсов. В традиционных ООП языках все можно красиво рассовать по пакетикам и классикам, каждый из которых автоматически родит новый неймспейс для всего, что внутри. В го по факту пакеты это единственный способ родить неймспейс, ничего мельче нету. Сами пакеты внутри представляют собой какие-то солянки всякой всячины, наваленной в кучу по принципу "ну вроде из той же оперы". Ублюдочное решение с capitalized названиями функций/переменных для определения их визибилити.

- Работа со строками и массивами с каких-то хуев идет не через прицепленные к ним методы, а через strings и slices. Я хуй знает, может я чего-то не понял, но мне чето кажется, что говно в духе strlen, strncpy и прочее просто нахуй не должно существовать в новом языке, когда очевидно, что s.length и s.substring() выигрывают в читабельности и удобстве на порядки.

- Абсолютно надуманная нахуй не нужная еботня с pointer vs value.

- Работа с ошибками. По факту предлагается на выбор два сорта говна, которые можно еще и смешивать между собой - sentinel values и создание кучи абсолютно одинаковых структур под разные типы ошибок. Первый подход еще можно использовать без рвотных позывов благодаря errors.Is(), но при необходимости в таком случае достать дополнительный контекст ошибки начинается трахомудия. Второй подход более гибкий, если это слово сюда вообще применимо, но проверка типа ошибки через errors.As() это ебаный кал собаки, раздувающий сервисы/хэндлеры до космических размеров на ровном месте.

- Крайняя невыразительность языка. Даже тернарника нет, ебаный стыд. Вечная еботня с шэдоуингом ерроров, возвращаемых вторым значением в кортеже. Идиотская надуманная разница между = и :=.

Пока что понравилось по большому счету только принудительное форматирование кода из коробки к единому стилю, и каноничные табы вместо пробелов для отступов.
39 3312011
Чото не кликает у меня в голове голанг. Не понимаю, как писать, чтобы в итоге не получалось какое-то месиво. Из того, что прям вызывает максимальное отторжение:

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

- Отсутствие нормальных неймспейсов. В традиционных ООП языках все можно красиво рассовать по пакетикам и классикам, каждый из которых автоматически родит новый неймспейс для всего, что внутри. В го по факту пакеты это единственный способ родить неймспейс, ничего мельче нету. Сами пакеты внутри представляют собой какие-то солянки всякой всячины, наваленной в кучу по принципу "ну вроде из той же оперы". Ублюдочное решение с capitalized названиями функций/переменных для определения их визибилити.

- Работа со строками и массивами с каких-то хуев идет не через прицепленные к ним методы, а через strings и slices. Я хуй знает, может я чего-то не понял, но мне чето кажется, что говно в духе strlen, strncpy и прочее просто нахуй не должно существовать в новом языке, когда очевидно, что s.length и s.substring() выигрывают в читабельности и удобстве на порядки.

- Абсолютно надуманная нахуй не нужная еботня с pointer vs value.

- Работа с ошибками. По факту предлагается на выбор два сорта говна, которые можно еще и смешивать между собой - sentinel values и создание кучи абсолютно одинаковых структур под разные типы ошибок. Первый подход еще можно использовать без рвотных позывов благодаря errors.Is(), но при необходимости в таком случае достать дополнительный контекст ошибки начинается трахомудия. Второй подход более гибкий, если это слово сюда вообще применимо, но проверка типа ошибки через errors.As() это ебаный кал собаки, раздувающий сервисы/хэндлеры до космических размеров на ровном месте.

- Крайняя невыразительность языка. Даже тернарника нет, ебаный стыд. Вечная еботня с шэдоуингом ерроров, возвращаемых вторым значением в кортеже. Идиотская надуманная разница между = и :=.

Пока что понравилось по большому счету только принудительное форматирование кода из коробки к единому стилю, и каноничные табы вместо пробелов для отступов.
40 3312028
>>12011
Чувак, Го - низкоуровневый язык.
С великолепной поддержкой конкурентного программирования.
И интерфейсы - тоже одна из главных киллер-фич, ты просто не понял нихуя.

Но, да, язык очень сильно не для всех. И точно не для вката с улицы.
И с неймспейсами (с их отсутствием) они лоханулись капитально.
Вообще - язык очень сырой, выглядит как грязный хак, который делали для внутреннего употребления, а потом отпустили на волю. Типа Котлина, не к ночи будь он помянут.
41 3312037
>>12028

>Чувак


Уже достаточно.

>Го - низкоуровневый язык


Ну началось в колхозе утро. Что в нем низкоуровневого, расскажи? Тот факт, что надо явно таскать за собой указатели и/или каждый раз думать, нужно ли мне передать в функцию конкретно эту структуру или ее копию? В языке со сборщиком мусора эта ебола вообще нахуй не нужна. Ах да, сборщик мусора.Плюс решать, где ты будешь размещать структуру - на стеке или в куче - здесь тоже нельзя. В чем тут низкоуровневость?

>И интерфейсы - тоже одна из главных киллер-фич, ты просто не понял нихуя.


Возможно. Зато я вижу, что я никак не могу в компайл-тайм проверить, что моя структура реализует интерфейс. Вернее могу, но через жопу, специальным var _ MyInterface = (*MyStruct)(nil) заклинанием. Просто заебись.

>И точно не для вката с улицы


Мне и после 10 лет жабы, питона и жабаскрипта все вышеобозначенные вещи кажутся полной ебанутой хуйней.
42 3312054

>Мне и после 10 лет жабы, питона и жабаскрипта все вышеобозначенные вещи кажутся полной ебанутой хуйней.



Это другой язык, понимаешь?
Не лучше, не хуже, а другой.
И его надо учить, а не думать, что тебе и так всё должно быть понятно.

Это сложный язык, и очень сильно не для всех.
И тебе он, скорее всего, не нужен. Как и мне.
43 3312060
А может мне кто-нибудь пояснить про контексты в го? Я понимаю что они нужны для отмены горутин, но зачем создавать context.Background в функции main?

Вроде как это нужно для graceful shutdown, чтобы при sigterm отменить все задачи. Но бекграунд пустышка, она не умеет отменять. Почему бы просто тогда не создавать отдельные контексты на уровне хендлера сервера?

И это правда, что все функции что работают с сетью, бд и файлами всегда должны иметь контекст первым аргументом? Как вы делаете?
44 3312063
>>12011

> Утиные интерфейсы


> глянуть сигнатуру класса и узнать, что именно он реализует


Потому что класс может дохуя всего имплементировать и их явное указание сильно засрало бы код, а для понимания какие структуры какие интерфейсы реализуют есть IDE

> Работа со строками и массивами с каких-то хуев идет не через прицепленные к ним методы, а через strings и slices.


Вот на это кстати как будто насрать в проде, там не нужна вся эта изощренная ебля со строками/массивами

> Даже тернарника нет


А вот тернарников да, иногда не хватает

> Отсутствие нормальных неймспейсов


Бля, да, а вот это мем, я когда понял что чтобы написать +- норм либу, нужно все срать на верхнем уровне проекта, я немного охуел)

> Вечная еботня с шэдоуингом ерроров


А как это мешает? Мне это только пару раз помешало, пришлось первый аргумент до вызова функции в var объявить

Лично меня нередко калит херня с маппингом структур, а-дя DTO и external версия одной и той же структуры (которые отличаются наличием полей id и deleted в dto версии), но я хз как это в других ЯП делается

На истину не претендую, я мимо студентик-стажер
45 3312066
>>12060
Контекст крутая идея как по мне. Да, он везде должен пробрасываться. Помимо того что он может быть закэнселен, в него также можно складывать всякое. Это бывает удобно, у нас на проекте например взаимодействие некоторых gprc сервисов через это реализовано. Типа в некоторых интерсепторах грац в контекст складывается нужное валью (например какая нибудь метаинформация с фронта) и передается дальше
46 3312068
>>12060

> Но бекграунд пустышка, она не умеет отменять


Потому что для глобального graceful shutdown всех модулей/сервисов нужно создавать context.WithCancel(context.Background())
image.png6 Кб, 754x80
47 3312611
Скажите, почему хеллоу ворд на шарпе (AOT компиляции в бинарник) весит почти два раза меньше чем гошный хеллоу ворд?
И мне при этом не надо трахаться с err != nil
48 3312734
>>11770

>подрачивают на раст


Издалека, как и мы все, ибо он страшный как ассэмблер блядь.

Мне почему-то ГО всегда казался "более быстрым питоном" чтоб можно было быстро нахуярить программу, в чём я не прав? (не считая обилия библиотек)
49 3312738
>>12007

>emperror


> // Recover from panics and handle them as errors


>defer emperror.HandleRecover(handler)



Из каждого утюга же пиздят что не надо рековерить го ерроры и надо с каждой ошибкой вручную ебаться
if err != nil
, врут?
50 3312739
>>12611
Потому что рантайм у гошки массивный? Ты там GMP-машину в хелло ворлд тащишь, очевидно же. Потому же и либы на го не пишут для использования в не гошной кодовой базе.
51 3312742
>>12734
Нахуярить быстрее чем на питоне? Не. Попробуй посмотреть на него как на С, на который высыпали самосвал сахара.
52 3312790
>>12738
Без понятия, таким не пользуюсь и паниками тоже (только в редких случаях). Я говорил скорее про emperror.Wrap и emperror.WithStack
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
53 3312804
>>12011
Про интерфейсы и неймспейсы - ну, а с "классами" получается не лучше, по-моему.

>Ублюдочное решение с capitalized названиями функций/переменных для определения их визибилити.


Да вроде нормальное.

>Абсолютно надуманная нахуй не нужная еботня с pointer vs value.


Типа, "программист вообще не должен задумываться над подобным выбором"?)) Для таких существуют ЯваСкрипты и прочие Явы.

>Даже тернарника нет, ебаный стыд.


Да и ладно, он же затрудняет чтение.

>>12028

>Вообще - язык очень сырой, выглядит как грязный хак


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

>>12742
Ну, не "сахара", а важных достаточно вещей.
55 3313024
Под wasm кто писал? Какие подводные?
56 3314307
Сап дроч, решил основательно засесть за этот язык. Сейчас дошёл до net/http и нихуя не понимаю!

http.ListenAndServe(":3000", nil) // вот тут запускает локальный сервер на порте 3000?

http.HandleFunc("/", myHandler) // - тут подрубается какой-то handlefunc, который типо обрабатывает подключение клиента по url-у "localhost:3000/", и как только обнаруживает подключение - выполнится скопированная функция myHandler

func myHandler(w http.ResponseWriter, r http.Request) {
log.Println("hi from Handler!")
w.WriteHeader(http.StatusOK)
} // но что такое ResponseWritter и
http.Request? Почему *http.Request передаётся по ссылке?

Извиняюсь за тупые вопросы, но нагуглить ничего не могу.
Некоторые ещё подрубают какой-то ServeMux, где вообще становится не понятно. Пишут, что ServeMux - маршрутизатор, но что он маршрутизирует, чем он управляет, если даже без него код работает также, как и с ним.
57 3314351
>>14307
// HandleFunc регистрирует handler в глобальный DefaultServeMux (net/http/server.go)
// http.ListenAndServe без второго аргумента слушает твой адрес и передает роутинг DefaultServeMux
// http.Request указатель на объект запроса; ResponseWritter интерфейс (поэтому без указателя, он и так им является) на объект для создания ответа

// Можно создать свой ServeMux и регистрировать в него handler'ы, а после передать в ListenAndServe
58 3314367
>>14307
Не хочу быть снобом, но ты меня вынуждаешь друг. Это все stdlib, у которой довольно неплохое описание в исходниках и документации. Погляди.
59 3314369
>>14351
Начнём с самого начала.

>HandleFunc регистрирует handler в глобальный DefaultServeMux (net/http/server.go)


Что значит "HandleFunc регистрирует handler"? Какой handler, что это. Если регистрирует, то откуда-то его берёт, но откуда. И что это.
Что значит "глобальный DefaultServeMux"? Что вообще такое ServeMux, какую функцию выполняет?

>http.ListenAndServe без второго аргумента слушает твой адрес и передает роутинг DefaultServeMux


Без второго аргумента оно не работает это раз; два - что значит роутинг; три - что такое DefaultServeMux. Зачем туда что-то передавать.

>http.Request указатель на объект запроса; ResponseWritter интерфейс (поэтому без указателя, он и так им является) на объект для создания ответа


"http.Request указатель на объект запроса" - что такое объект запроса, зачем он нужен.
Что значит "на объект для создания ответа". В смысле объект.

>Можно создать свой ServeMux и регистрировать в него handler'ы, а после передать в ListenAndServe


Спасибо за совет, но ничего не понятно.

Мне гораздо проще понимается всё на практике, можешь посоветовать где всё это можно было-б прочитать и протестить.
image.png141 Кб, 1500x1041
60 3314373
>>14367
Ну и что мне этот текст даёт? Что читать то, а? Меня интересует ответ на ворпос, что это за рандомные и не понятные функции >>14307, что каждая из них делает. Имею ввиду не под капотом, а просто понять на поверхностном уровне.
image.png133 Кб, 1711x687
61 3314379
>>14373

наслаждайся
62 3314383
>>14369

Че там не работает без второго аргумента у тебя? Все работает у всех
image.png30 Кб, 1049x178
63 3314389
64 3314392
>>14389

Ну nil ебни туда по кайфу
65 3314440
>>14369
Буквально все это можно спросить и чатгпт анон. Так ты не будешь тратить время многоуважаемых голанг наносников итт, а еще и объяснят лучше.
66 3314451
>>11346

>1.5 джуновских вакансий на хх


понял тебя
67 3314492
>>14373
Ты просто тупой. Не нужен тебе го.
68 3314564
>>12028

>Го - низкоуровневый язык


В каком месте?

>>12028

>язык очень сильно не для всех


А для чего и для кого он? Вон выше скидывали пример XTLS-Xray как сетевой утилиты, написанной на го. Но таких вещей делают 1.5 команды в мире.
В России го зачем-то используют для крудов, которые раньше писались на джаве, шарпе и питоне. И мне кажется для крудов это сильно плохой выбор, начиная самим всратым языком, заканчивая весьма убогим тулингом для написания классических бекендов с походами в базу данных. Да, можно все писать на голом net/http, и я так пробовал, но получается хуйня, объемы бойлерплейта раздуваются просто до космических масштабов.
69 3314567
>>12037

>Зато я вижу, что я никак не могу в компайл-тайм проверить, что моя структура реализует интерфейс. Вернее могу, но через жопу, специальным var _ MyInterface = (*MyStruct)(nil) заклинанием



Двачую, тоже раздражает эта хуйня.
70 3314590
>>14564

А что именно раздувается? Пример покажи пожалуйста
Я написал вот небольшой сервис, но напряга супер не заметил.
Конечно на шарпе половина бы само сгенерилось, но хз как-то
71 3314594
>>14590

>А что именно раздувается


Обработка ошибок.

Работа с ошибками. По факту предлагается на выбор два сорта говна, которые можно еще и смешивать между собой - sentinel values и создание кучи абсолютно одинаковых структур под разные типы ошибок. Первый подход еще можно использовать без рвотных позывов благодаря errors.Is(), но при необходимости в таком случае достать дополнительный контекст ошибки начинается трахомудия. Второй подход более гибкий, если это слово сюда вообще применимо, но проверка типа ошибки через errors.As() это ебаный кал собаки, раздувающий сервисы/хэндлеры до космических размеров на ровном месте.
72 3314619
>>12011

>- Утиные интерфейсы.


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

>- Отсутствие нормальных неймспейсов.


Тоже пиздец, я бы сюда еще цикличные импорты добавил

>- Работа со строками и массивами с каких-то хуев идет не через прицепленные к ним методы, а через strings и slices. Я хуй знает, может я чего-то не понял, но мне чето кажется, что говно в духе strlen, strncpy и прочее просто нахуй не должно существовать в новом языке, когда очевидно, что s.length и s.substring() выигрывают в читабельности и удобстве на порядки.


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

>- Абсолютно надуманная нахуй не нужная еботня с pointer vs value.


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

>- Работа с ошибками.


Это говно ебучее, с той же философией сделали в расте и оно удобнее когда вместо бойлерплейта наверх пробрасываешь при помощи ? но там проблема что разные типы друг в друга не впихуются и приходится брать anyhow или колхозить свой тип ошибок и писать From для каждого типа, которых собираешься впихнуть, тоже говнясто, но уже лучше чем в go.
Этот подход с ошибками с одной стороны хорошо ты начинаешь обрабатывать ошибки которые мог бы не учесть при исключениях и уже добавляешь нужное поведение. С другой стороны для обычного бекенда чтобы гонять json туда-сюда это крайне избыточно, такое хорошо наверное где требуется высокая паранойя и ответственность чтобы не одна ошибка не проскочила. В остальных случаях проще наверху ловить в try/catch ролбекать транзакцию и посылать нахуй клиента. В той нише куда залетел го я думал лучше было бы второе.

>- Крайняя невыразительность языка. Даже тернарника нет, ебаный стыд. Вечная еботня с шэдоуингом ерроров, возвращаемых вторым значением в кортеже. Идиотская надуманная разница между = и :=


Ну тут типа философия го, типа ты можешь что-то сделать только одним способом, плюс делали акцент на том что язык простой и понятный для всех, поэтому в нем много чего нет. Да и морж оператор хуйня согласен
72 3314619
>>12011

>- Утиные интерфейсы.


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

>- Отсутствие нормальных неймспейсов.


Тоже пиздец, я бы сюда еще цикличные импорты добавил

>- Работа со строками и массивами с каких-то хуев идет не через прицепленные к ним методы, а через strings и slices. Я хуй знает, может я чего-то не понял, но мне чето кажется, что говно в духе strlen, strncpy и прочее просто нахуй не должно существовать в новом языке, когда очевидно, что s.length и s.substring() выигрывают в читабельности и удобстве на порядки.


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

>- Абсолютно надуманная нахуй не нужная еботня с pointer vs value.


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

>- Работа с ошибками.


Это говно ебучее, с той же философией сделали в расте и оно удобнее когда вместо бойлерплейта наверх пробрасываешь при помощи ? но там проблема что разные типы друг в друга не впихуются и приходится брать anyhow или колхозить свой тип ошибок и писать From для каждого типа, которых собираешься впихнуть, тоже говнясто, но уже лучше чем в go.
Этот подход с ошибками с одной стороны хорошо ты начинаешь обрабатывать ошибки которые мог бы не учесть при исключениях и уже добавляешь нужное поведение. С другой стороны для обычного бекенда чтобы гонять json туда-сюда это крайне избыточно, такое хорошо наверное где требуется высокая паранойя и ответственность чтобы не одна ошибка не проскочила. В остальных случаях проще наверху ловить в try/catch ролбекать транзакцию и посылать нахуй клиента. В той нише куда залетел го я думал лучше было бы второе.

>- Крайняя невыразительность языка. Даже тернарника нет, ебаный стыд. Вечная еботня с шэдоуингом ерроров, возвращаемых вторым значением в кортеже. Идиотская надуманная разница между = и :=


Ну тут типа философия го, типа ты можешь что-то сделать только одним способом, плюс делали акцент на том что язык простой и понятный для всех, поэтому в нем много чего нет. Да и морж оператор хуйня согласен
73 3314622
>>12028

>Го - низкоуровневый язык.


Ну как сказать, чуть пониже жабы да, но в целом та же хуйня

>С великолепной поддержкой конкурентного программирования.


Даже в js с промисами удобнее работать чем с горутинами, тут столько косяков в дизайне

>И интерфейсы - тоже одна из главных киллер-фич


Действительно иногда в процессе выполнения бывает киллер-фича

>Но, да, язык очень сильно не для всех.


Проблема в том что его везде стали использовать

>Типа Котлина, не к ночи будь он помянут.


Они там упоролись по-другому. Основное это вендорлок, без их ide работа с языком затруднена и jvm это просто финиш, теперь туда пришли спринг и копроративное болото. Могли бы вместо всякой компиляции в js запилить kotlin native чтобы работать без жвм и сделать менее прибитым к ide и в целом к своей компании, тогда и взлетел бы повыше.
74 3314625
>>14564

>В России го зачем-то используют для крудов, которые раньше писались на джаве, шарпе и питоне.


Скорее всего попробовали дать жабистам пописать на нем, а синтаксис не дает размахнутся с AbstractSingletonProxyFactoryBean, вот и получилось написать за несколько дней то что раньше писалось несколько месяцев на жабе, кабанчикам понравилось и понеслась
75 3314661
>>14619

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



Можно какой то более конкретный пример когда это проблема? Я искренне не понимаю ситуации где функция должна принимать пустой интерфейс а не конкретный. Звучит как хуевый дизайн самого метода/сервиса
76 3314758
>>14661

>Звучит как хуевый дизайн самого метода/сервиса


Звучит как примерно 90% кодовой базы. Я часто вижу, что интерфейсов либо нет, и всё захардкожено, либо везде var 🤡 interface{}
77 3314887
>>14661
Проблема в том что ты не всегда живешь в идеальном мире и код не всегда написан тобой и иногда приходится видеть такое. Ну и плюс сторонние либы чуть менее чем полностью состоят из пустых интерейсов.
То что с нуля пишется разумеется уже имеет лучшую архитектуру и адекватный код
78 3315021
>>14758

>interface{}


В чём он не прав? Вместо ебли с определениями
79 3315041
>>15021
А зачем тогда нужен язык со статической типизацией? Проще питон взять.
interface{} это все равно что указатель на void в Си использовать. Или Object из джавы.
80 3315250
>>15041

>А зачем тогда нужен язык со статической типизацией?



Говорят тогда будет работать на 0.1234 ns быстрее всё если типы прямо указывать, не зря ебёмся же
81 3315294
Привет, а что по фреймворкам в Го? Какой брать для веба?
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
82 3315542
>>15294
Фреймы для быдла.
83 3315555
Goвно
84 3315569
>>14622

>Они там упоролись по-другому. Основное это вендорлок, без их ide работа с языком затруднена и jvm это просто финиш, теперь туда пришли спринг и копроративное болото. Могли бы вместо всякой компиляции в js запилить kotlin native чтобы работать без жвм и сделать менее прибитым к ide и в целом к своей компании, тогда и взлетел бы повыше.


Котлин теперь основной язык разработки под андроид. Это огромный кусок рынка. И начинался он именно как better Java, чтобы реализовать синтаксисический сахар, но так чтобы всё работало на Dalvik. В бекенд он пришёл сильно позже и это уже была попытка ЖБ как-то ещё пристроить язык и продавать свои IDE. И в целом, там где пишут а не переписывают с Jaca бэк на Котлине Спринг не используют.
85 3315670
А как вы структурируете свои сервера и веб сервисы? Что посмотреть-почитать?
86 3316165
>>14492
Но создатель языка сказал что го для тупых?
87 3316170
>>14622

>прибитым к ide и в целом к своей компании,


Жаба прибита все к той же IDE, но никто об этом не кричит.
выбрал шарпы для своих проектов, только потому что нормальная поддержка в трех крупных редакторах
88 3316173
>>14625
Звездеж, жабист/шарпист со спрингом/asp.net за минуту разворачивает то, что на го еще даже не написано еще.

Го пытались продать как язык для тупых, мол кабан получить тру-кодеров по цене суслика. Но деды родом из 70х не писавшие реального кода 50 лет не знали, что главная сложность в современной разработке это не синтаксис.
89 3316174
>>15294
На го не пишут реальный веб, там микро-писька кидающиеся json'нами, что-то больше на нем писать на можно, но больно, поэтому до сих пор нет норм веб комбайна. естественно будут кричать ненужно, все чего нет всегда кричат ненужно, как и дебаггер не нужен был, как и дженерики, как и обработка ошибок итд
90 3316178
>>15569
Котлин лишь обосрался с тем, что на jvm больше (практически) не начинают бэкенд проекты.
91 3316225
>>16178

>на jvm больше (практически) не начинают бэкенд проекты


Этим мантрам уже лет 10.

>2 978 вакансий «Java»


>1 157 вакансий «C#»


>1 696 вакансий «Go»

92 3316311
>>14758
>>14887
Не ну это объективно пиздец. Я придумал случай, когда метод реально должен принимать any. Это работа со всякими маршелерами/анмаршелерами. Но пихать везде эни когда можно нормально описать интерфейс это просто треш
93 3316613
>>16225
У тебя бот сломался, неправильный триггер.
94 3316642
>>16613
По сути есть что?
95 3317107
>>16225

>1 696 вакансий «Go»


На некоторых сайтах у го багованный поиск из-за простого базворда. Да, в топе более релевантное но дальше идет мусор. В моей мухосране вообще выдает яндекс сервисы (видно где-то есть базворд го)
Помню как был рост на тиобе, когда появилась игра go.
96 3317108
>>16642
Да, бот сломался, триггер сработал на котлин вместо го.
17216367925000.jpg144 Кб, 640x430
97 3317782
Потихоньку вкатываюсь
Еще немного и будет открыта дорога в энтерпрайз

бабло в пути
Нужно только потерпеть...
98 3317813
>>17782
Останется только где-то взять 5 лет работы. додик повелся на развод инфоцыган
99 3318296
>>17813
Нарисует. У меня 6 лет в резюме было нарисовано.
100 3318336
>>17782

>Потихоньку вкатываюсь


Вкат закрыт.
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
101 3318391
>>17782
Конечно, шансы есть. Успехов!
102 3318505
>>16173

>Звездеж, жабист/шарпист со спрингом/asp.net за минуту разворачивает то, что на го еще даже не написано еще.


А потом жабист идет смотреть 3 часа конференцию в которой три долбоеба и крупных банков в синих рубашках с бейджиками обсуждают как нужно правильно написать конфиг для очередной ОРМ чтобы не было N+1 и чтобы вся БД не выгружалась в память.

> главная сложность в современной разработке это не синтаксис.


Это верно подмечено, жабисты и без синтаксиса нахуевертят сложностей
103 3318510
>>12611
Наверное в него статически компилится дохуя сишных либ. Это нетрудно проверить.
104 3318551
>>18505

>А потом жабист идет


Жабист идет нахер, а вот у шарпистов есть серия стандартов в ОРМ, а не зоопарк васянских либ, и понимаешь в чем фишка, ты либо можешь это использовать либо нет. Это выбор, а в го, извини, выбора нет. И все равно какой-то
мудень забудет сделать проверку err = rows.Err()
105 3318556
>>18510
Там в шарпах тоже статик бинарь.
В голанге шедулер корутин, в шарпах stackless стейт машина, он даже не знает про корутины.
106 3318646
>>14369
Мб уже объяснили, или сам отрыл, но мой совет такой: возьми и почитай исходный код стдлибы. Вот сядь и прочитай. Построй связи между компонентами, посмотри что и как вызывает и в какой последовательности. Мне в свое время понять стандартный http помогло именно это.
107 3318652
>>14369
В добавок к предыдущему докину, что без личного прощупывания хуй поймешь отличия всех Handle, Handler, HandleFunc, HandlerFunc и т.д. Ну и гуглить не забывай, тоже важный момент, инфы навалом
108 3318677
>>16174

> как и дженерики


Отдельный мем. Их где-нибудь по итогу использовали адекватно? Я вроде в стандартной либе где-то видел один раз и все.
17310958002630.mp41,3 Мб, mp4,
640x360, 0:04
109 3319227
110 3319306
>>19227
Они оказывается еще до кассы в пятерочке такими злыми становятся
111 3320063
У кого какие пет-проекты? Го обсудим
112 3320588
>>20063
Го можно терпеть в бигтехе за бабло, но делать пет проекты, мы че копрофилы?
113 3320594
>>20063
Телеграм бота писал. Бот на ключевое слово, постил в чат картинку.
image.png9 Кб, 321x241
114 3320711
>>20063
Вот это планирую
никогда проекты не делал. Ток задачи решал на кодварсе или литкоде
115 3320741
>>20711
А где эти проекты можно найти?
В частности что у тебя на скрине
116 3320748
>>20063
А что на гоу кроме круда и cli утилиты сделать можно?
Чет задизморалился на этой теме.
Что-то интересное превращается в обертку системных либ
117 3320771
Кто-нибудь использует какие-нибудь обертки над горутинами, чтобы без ебли быстро писать worker pool'ы и всякие там таск раннеры типа как errgroup?

Поймал себя на мысли, что не понимаю как из errgroup получать результаты функции. Если жаваскриптеры есть, то мне нужен аналог Promise.all и Promise.allsettled.

Думаю может начать писать какую-то обертку даже свою с каналами.
image.png93 Кб, 1010x742
118 3320782
119 3320872
>>20748
Системные языки это языки с прямым менеджментом памяти.
Если бы не положили бы болт на арены, то с натягом можно было отнести к низкоуровневому (как спаны в си-шарпе) но никак не к системным. Вроде в го даже ансейва нет.

Языки с низкоуровневыми возможностями
C#, Свифт, Котлин.нейтив
Системные языки
C/C++, Rust, Zip (и прочая экзотика)
120 3320922
>>20872

>Вроде в го даже ансейва нет.


Есть конечно, и ручная аллокация/деаллокация там. И подключение библиотек на С с вызовом функций из них.
121 3320986
>>20872
https://github.com/0xcafed00d/joystick

Вот держи байтоебство. На го этим заниматься можно.
Можно даже на уровень IP спустится (ниже TCP и HTTP) и от туда ручками пакеты заворачивать.

Другое дело, что занимаются таким тут реже, и я чаще вижу c-биндинги, проброшенные в го, чем чистое го-байтоебство.
122 3321085
>>20986
Наверное байтоебство неправильный мем, с байтами ты буквально ебешься когда сырую utf-8 строку гоняешь или 8-бит буферы. Тут скорее ебство с сырыми указателями.
123 3321089
>>20922
>>20986
Это же вроде отдельная тулзовина cgo а не чистый go?
124 3321461
>>21089
Ручное управление есть и просто в ансейфе. Дёргание функций из сишных либ либо да, через пакет CGo, либо с компилятором GNU, там вообще напрямую и гошные функции можно из си дёргать.
125 3321475
>>21089
В примере выше дергание чистых си-функций только в файле для osx (darwin). Линукс не использует си, если посмотришь исходники.
Даа, ебать его рот блять сука, втянули нахуй в какую-то хуйню. Коломойский..mp41,3 Мб, mp4,
1280x720, 0:09
126 3321921
>>08295 (OP)
Блять, у меня горит нахуй от того что не могу понять как устроен тип string.

Вот есть переменная типа string:
1. под капотом она имеет указатель на массив byte

2. в свою очередь byte это просто обертка над типом uint8

3. но из-за того что строка сама по себе не массив символов а массив байтов, собственно любая попытка получить доступ к конкретному символу обернется фейлом так как ты получишь только числовое представление символа из кодировки UTF-8

4. Чтобы это исправить ты должен преобразовывать полученный конкретный байт из строки в тип string().

Собственно вопрос.
НАХУЯ НУЖЕН ТИП rune?????!!!
Ну вот нахуяяяя!?!?!?!??!??!?
БЛЯТЬ как же меня корежит и трясет....
127 3321925
>>21921

>НАХУЯ НУЖЕН ТИП rune?????!!!


Чтобы преобразовывать строку в слайс рун и работать спокойно с символами, не ебя себе мозг.
128 3321928
>>21925
А нельзя, потому что одна графема может состоять из нескольких кодпоинтов, лемао.
image.png40 Кб, 708x436
129 3321949
>>21925
>>21928
Так бля, я накинул такой пример, я правильно понимаю что, из-за того что в byte aka uint8 aka 1 байт помещается только цифры от 0-9, латиница A-z a-z и горстка ебаных символов, любая попытка использовать иное аля кириллица, иероглифы приводит к фейлу так как в ASCII/UTF-8 они просто не прописаны, и эту проблему решает rune aka uint32 aka 4 байта который по сути имплементирует UTF-32 благодаря которому можно работать с любыми символами мира.
130 3321955
>>21949

>можно работать с любыми символами мира.


Не совсем. Есть символы-модификаторы для д̷͊͛̌͜и̵̺̟̊а̵̝̫͍͙̊к̷̡̛̜͒̈͘͘р̵̛͍̬̍̈́и̷̺̚т̶̡͂̈̔и̵̥̉̽̂к̶̤̤͕̫̎̾͒̓ͅи̷̜̐̚, есть составные эмодзи (мужчина + черный + беременность). То есть на глаз определить, сколько байт в строке вообще не всегда возможно.
131 3321959
>>21949
В UTF-8 есть всё. Но это тип переменного размера, поэтому руна берёт максимальные 4 байта и всё.
132 3321972
>>21955
>>21959
Нихуя не понял....

>Но это тип переменного размера


UTF-8 он может быть от 1 до 4 байт, хорошо

>Есть символы-модификаторы для д̷͊͛̌͜и̵̺̟̊а̵̝̫͍͙̊к̷̡̛̜͒̈͘͘р̵̛͍̬̍̈́и̷̺̚т̶̡͂̈̔и̵̥̉̽̂к̶̤̤͕̫̎̾͒̓ͅи̷̜̐̚, есть составные эмодзи (мужчина + черный + беременность).


Есть такие символы для которых нужно несколько рун?
133 3321975
>>21972

>Есть такие символы для которых нужно несколько рун?


Да. Поэтому на практике UTF-32 просто ни для чего не нужен.
134 3322408
>>21972

>Есть такие символы для которых нужно несколько рун?


Знаменитый флаг Уэльса 🏴
135 3322412
>>21928

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


В ASCII такой хуйни не было!
136 3322484
На го нет вакансий в валлед ворлде. Без шуток. В странах первого мира (нидерланды, uk, швейцария, австрия) не используется нигде голанк. В США тоже не так много вакансий на го. С чем это связано? Почему го взлетел именно в РФ и нигде более?
137 3322541
>>22484
Потому что в РФ живой рынок, много проектов с нуля пишется, а го это отличный язык как новый выбор. В странах загнивающего мира поддерживают тухлое легаси. Посмотри сколько там вакансий на ебучем Коболе и охуей.
138 3322563
>>22484

>Почему го взлетел


А хулиб ему не взлететь? Хороший язык же
139 3322571
>>22484

>С чем это связано? Почему го взлетел именно в РФ и нигде более?


из за использовании в госухе
140 3322577
>>22484
Уровень сеньоров и тимлидов ниже.
Ну, то есть, реально есть "молодые и успешные" тимлиды считающие, что го это "улучшенный си".
141 3322622
>>22484
Потому что го лучше всего подходит, чтобы писать разные парсеры/брутфорсы/чекеры/регеры/бомберы/подобный около-хак софт и бекенд к телеграм ботам, а у нас это все любят как нигде.
142 3322660
>>22622

>парсеры



Что-то хоть не хуже питухонского Beatiful Soup есть на Го для парса хтмла и поиску по css селекторам в нём?
143 3322675
>>22660
https://github.com/PuerkitoBio/goquery есть вполне неплохой аналог.

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

В остальном да, скрепер на петухоне напишется раза в 1.5-2 быстрее чем на го, там попроще и библиотеки приятнее.
144 3323192
>>22660
>>22675
Какие вообще причины писать скрепер не на питухоне? Даже если ты отбитый фанат говна.
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
145 3323311
>>22484
А как ты так узнал? Кажется, в "валлед вордле" вообще нет единой вменяемой доски объявлений для вакансий.
146 3323354
>>23192
Все пишется приятнее на петухоне. Мне интересно, только у нас ставят выше комфорт разработки с желанием сэкономит кабану на железке? Или заграницей так же?
147 3323392
Кто-нибудь с других языков в Го перекатывался? Посоветуйте книги для перекатывающихся.
Читать 500 страниц про "переменная это коробочка, куда мы кладем данные" как-то не хочется.
148 3323569
>>23392
В чем смысл? Язык за выходные учится
149 3323575
>>23392

>Кто-нибудь с других языков в Го перекатывался?


Главный вопрос - зачем это добровольно делать?
150 3323576
>>23575
В среднем на российском рынке на Го больше зп и пишутся новые проекты. На джаве и питухоне ситуация хуже - много чего находится в состоянии вечной поддержки легаси и зепки ниже.
151 3323845
>>23392
Документация на оф сайте, плюс чатгпт для тупых вопросов. В го самое сложное это горутины и ее паттерны. Если катишься с js, то придется ещё про синхронизацию изучать, всякие мьютексы и семафоры.
152 3323848
>>23192
Причина та же как и везде с го. Используя го можно затыкать боттлнеки чуть более производительным софтом. Одно дело написать за вечер скрепер Амазона и забыть, собрав данные на сегодня.

Другое дело писать сложную систему с кучей скреперов разных сайтов, масштабировать в кубернетисах, экономить деньги кабану и прочее. В какой то момент 100 мб в ОЗУ на питон может стать затратнее чем 10 мб на говне.

Но я согласен что это не всем надо.
153 3323985
>>23576
ЗП больше потому что нужны сеньки, которые разгребут бойлерплейт предыдущих модных и молодежных
154 3324035
>>23985
Тыскозал?
155 3324060
>>24035
Яработал. Гоферы через бойлерплейт и самописульки умудрились сделать легаси код еще хуже чем на жабе, казалось бы куда хуже.
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
156 3326413
>>24060
Просто не повезло.
lang-demand.PNG66 Кб, 864x915
157 3326432
158 3326861
>>26413

>Просто не повезло


вкатится в го.
o7n2H7v5qpw.jpg122 Кб, 1774x1265
159 3329361
Помогите тупому понять указатели в го, когда нахуй писать эти * и &, а когда нет?

js/ts/php/python-макака, 8 лет опыта
160 3329387
>>29361
В смысле что эти символы значат или юзкейсы?
161 3329395
>>29387
Юзкейсы. Почему-то неочевидно, когда использовать указатель при передаче аргумента в функцию, а когда не использовать. Когда обявлять переменную как ссылку, а когда нет.
162 3329532
>>29395
Ну я даже хз, как это может быть неочевидно. В одном случае ты передаёшь сам объект, состояние которого функция может как-то поменять. В другом ты передаёшь функции копию, и похуй, что она там с ней делает, у неё свой такой же, а твой у тебя остался.
163 3329533
>>29395
Запомни главное. Когда ты передаешь значение в аргумент функции - у тебя это значение копируется. Не важно: строка или структура.
Это обычное поведение, как в си. Если ты хочешь чтобы функция мутировала твой аргумент - надо передавать ссылку на переменную (&). А чтобы указать функции что она принимает ссылку используется (*).

Почитай про указатели в си, тут тоже самое, но без арифметики.
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
164 3329742
>>29361
https://go.dev/play/p/rekATAlU1Ow
Допустим у тебя есть переменная типа "структура с некими полями". Ты хочешь отправить эту переменную в функцию так, чтобы функция изменила значения её полей. Соответственно, если функция принимает переменную не по указателю, то в туда скопируется значение самой переменной - в данном случае структура, т.е. по сути, просто создастся новая такая же структура. Когда выполнение функции закончится, ты обнаружишь, что поля переменной, которую ты передавал в качестве аргумента в функцию, остались прежними. А тебе нужно, чтобы функция меняла значения полей исходной переменной, поэтому тебе придётся отправить её по указателю - всё просто.

Ну и плюс, есть более сложные кейсы с использованием указателей. К примеру, рекурсивные структуры данных - типа списков, деревьев и всякого такого.
165 3329979
>>12011

> - Работа с ошибками. По факту предлагается на выбор два сорта говна, которые можно еще и смешивать между собой - sentinel values и создание кучи абсолютно одинаковых структур под разные типы ошибок. Первый подход еще можно использовать без рвотных позывов благодаря errors.Is(), но при необходимости в таком случае достать дополнительный контекст ошибки начинается трахомудия. Второй подход более гибкий, если это слово сюда вообще применимо, но проверка типа ошибки через errors.As() это ебаный кал собаки, раздувающий сервисы/хэндлеры до космических размеров на ровном месте.


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

>В традиционных ООП языках


Го не ООП язык.
166 3329991
>>29979

>Ошибки не предназначены для того, чтобы их анализировать.


И как мне понять что вернуть юзеру, 40Х или 50Х? На самом нижнем уровне в каком нибудь парсере решать, что это за тип ошибки и возвращать 401?
167 3330010
>>29532
>>29533
>>29742
Спасибо.

>https://go.dev/play/p/rekATAlU1Ow


Отлично помог этот пример, и каким же простым он оказался, теперь я чувствую себя ещё более тупым, чем я думал. Завидую людям, которых обучали сразу с низкоуровневых языков программирования. Потому что мне теперь ещё предстоит увлекательное погружение в горутины, каналы и вот это всё.
animatedf3zs1vy9ce5bdbccf52f68213351ca0b7920a521.gif84 Кб, 350x350
168 3330088
>>30010
Не парься, в любом случае твой опыт вряд ли усугубит понимание. Меня хоть и обучали в универе на низкоуровневых ЯП, но до этого я самообучался вообще хрен знает с чего - со всяких ActionScript'ов в частности.
169 3330629
когда уже сдохнет зумерское хуйло golang...
170 3330814
>>30629
Как только пердиксы изобретут что-то поновее и где зп будут ещё повыше.
171 3330975
Как запустить свой go код на роутере например keenetic?
Вроде как есть mipsel архитектура, но м.б. существует гайд, как его туда закинуть?
172 3330979
>>30010
Горутины и каналы - это примитивы довольно высокого уровня.
Остальное можно изучить, когда почувствуешь, что тебе это понадобилось.
173 3330989
>>22622
Как на нём можно писать такое, если даже хеллоуворлд на 2 Мбайта?
174 3331047
>>30989
Это много? Да хоть на 100, какая разница?
175 3331065
>>30989
Смотря с чем сравнивать. Из своей практики скажу. Есть у меня пара серверов на пайтоне и ноде. Оба занимают в ОЗУ около 100-150 мб при очень небольшой нагрузке.
Схожий сервер на го в памяти занимал 10-20 мбайт, в 10 раз меньше.
То что бинарник весит 10-20 мбайт не так страшно, потому что RAM намного дороже чем HDD/SSD. При этом писать на го не то чтобы прям сильно сложнее, чем на упомянутых языках. В отличии от раста, зига или, не дай боже, чистого си.
176 3331067
>>30989
Снова этот еблан, считающий размер хеллоуворда за основную характеристику любого ЯП
177 3331163
какие шансы найти работу джуном?
178 3331212
>>31163
6,284%
179 3331219
Первичная проблема го состоит в том, что в бинарнике содержится весь рантайм го. Это как если бы каждый jar-файл содержал весь jdk. Ни каких способов выгрузить рантайм в виде dll или so файлов нет.
180 3331220
>>31219
Почему это проблема?
181 3331226
>>31220
Динамические библиотеки загружаются ОС один раз и разделяются между разными процессами так, как будто этот код часть самого процесса. Таким образом система экономит как оперативную память, так и место на диске.
182 3331231
>>31047
>>31065
Часто можно встретить утверждение, что го якобы отлично подходит для написания консольных утилит. Однако, консольные утилиты должны занимать минимум места на диске, потому что их много (посмотрите в любой unix-системе папку /bin) и каждая такая утилита решает свою маленькую задачу. Если переписать утилиты на го, то размер ОС распухнет в 1000 раз и тогда даже террабайтных дисков не хватит. Но современным программистам плевать на ресурсы, они готовы писать на любимом языке, раздувая код в тысячи раз.
Порой просто удивительно, что в 80-90-х многие программы шустро работали на слабом железе, а сейчас им подавай пк с последним процессоров, огромным диском (да и ещё и SSD!) и десятками гигабайт памяти.
183 3331244
>>31231

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


Да, всё так, всем похуй на ресурсы. У меня на VPS за 5 баксов 50 гигов диска, как-нибудь переживу тяжесть гошных бинарников.

>Порой просто удивительно, что в 80-90-х многие программы шустро работали на слабом железе, а сейчас им подавай пк с последним процессоров, огромным диском (да и ещё и SSD!) и десятками гигабайт памяти.


Гошные программы вполне шустро работают, они эффективны в плане потребления ресурсов CPU, так что здесь ты привираешь.
184 3331354
В этой параше, даже нельзя определить поле структуры и метод с одним и тем же именем.
185 3331484
>>31354
Всяко лучше, чем ставить (((скобочки))) в плюсах, чтобы компилятор понял, что ты не функцию объявляешь.
186 3331489
>>31231
Успокойся, ребёнок. Каждому языку − своя задача. Да, окружение на го для ОС будет весить и жрать пиздец. Зато вся тысяча нужных утилит будет написана раньше, чем ты выловишь сегфолты в своём грепе. И бизнесу часто нужно первое. Ему похуй на стоимость железа, ему нужно чтобы в прод выкатилось позавчера.
Но тебя никто не заставляет работать на кабанов, стань системщиком и еби байты себе в удовольствие.
187 3331860
>>31484
Так ты и так должен ставить скобочки при вызове метода. В чем проблема понять что foo.bar это ображение к полю, а foo.bar() это вызов метода? При этом локальную переменную с именем метода объявить можно, никаких проблем это не вызывает.
image.png70 Кб, 559x609
188 3331892
>>31860
Потому что ты можешь функцию передавать ссылок как коллбек. Ты точно программист?
photo2024-11-2916-56-35.jpg29 Кб, 1100x154
189 3331984
>>31860

>Так ты и так должен ставить скобочки при вызове метода. В чем проблема понять что foo.bar это ображение к полю, а foo.bar() это вызов метода?


Пожалуй, ни в чём. А как насчёт примера посложнее, юный плюсовик? Создадим контейнер со своим компаратором. Ой, или мы функцию объявляем. Или нет? Помогите Даше компилятору разобраться в простом и удивительном синтаксисе, поставьте двойные скобочки.
190 3331990
>>31231

>> Порой просто удивительно, что в 80-90-х многие программы шустро работали на слабом железе, а сейчас им подавай пк с последним процессоров, огромным диском (да и ещё и SSD!) и десятками гигабайт памяти.


Слабее железо -> больше требований к оптимизации -> работа сложнее -> меньше специалистов
Представь современный мир, если бы только чистые Си и остались
191 3331995
Столкнулся с задачей необычной. Нужно в хендлере сформировать жсон, а в мидлваре обернуть этот жсон в другой жсон. Это вообще возможно сделать без оверпердолинга? Насколько помню из responseWriter'a прочитать нельзя, т.е. достать, десериализовать и заново сериализовать не выйдет.
192 3332147
Гоферы, а как у вас миграции генерируются?
193 3332235
>>31995
Но можно подменить responseWriter на свой кастомный, на то он и интерфейс же. В мидлваре подменить респонсрайтер на фейкреспонсрайтер, который сохранит тело в буфер, обернёт ещё раз, и вызовет уже оригинал?
194 3332371
>>31892

>Потому что ты можешь функцию передавать ссылок как коллбек.


Ок, это аргумент.

>>31984
Шизоид, прими таблетки. Причём тут Си?
195 3332376
>>32371

>Причём тут Си?


Действительно причём тут няшная, когда на пике плюсоговно?
196 3332612
>>32371

>Причём тут Си?


Да ни при чём. Но очень показательно, что плюсовик даже не узнаёт свою же парашу. Не зря вас к ядру линукса не подпускают.
197 3332669
Добрый день. Пилю свой пет-проект с psql, блекджеком и докером. При изменении значения в бд, въебывается изначальный порядок значений.
Было например "1,2,3,4", а стало "4,1,3,2". При этом функционально все работает нормально.
Это нужно как-то фиксить или так и должно происходить?
198 3332671
>>32669
ORDER BY
199 3332886
>>32669

>Было например "1,2,3,4", а стало "4,1,3,2"


Как это?
200 3333047
>>32886
Базе похуй в каком порядке выдавать результаты, если ты не указываешь сортировку.
Забавно видеть такой вопрос в го треде.
201 3333077
пиздец
202 3333107
семирипл приди...
203 3333112
>>32376
>>32612
Шизло -ТАБЛЕКИ, ПРИЯНЯЛ, БЫСТРО!
204 3333153
>>33107
хоба
205 3333524
>>33153
хоба
206 3336630
Мертвый тред
207 3336896
Хочу реализовать монаду Maybe и возникла проблема с ебучими дженериками. Метод у типа не может иметь параметров типа и из-за этого не могу реализовать метод map как метод типа, только как отдельный метод.
Есть какие нибудь идеи как это обойти?
208 3336936
>>36896

> Есть какие нибудь идеи как это обойти?


Есть. Сменить язык. На Go невозможно реализовать эту монаду, как и большинство примитивов фп, особенно без использования interface{} и тайп асертов.
Дженерики в го это по сути кастрированный концепт, который скорее всего добавили по просьбам трудящихся (пока их не было постоянно стоял визг о том, как они нужны). Редко вижу проекты, где они неиронично используются, мягко говоря. А без нормальных дженериков, какие уж тебе тут монады.
209 3337457
Какую библиотеку в проде юзают чтобы представить на го вариант std::optional плюсового? Просто нужна структура со значением, булем и методами типовыми?
Может это есть в каком-то пакете общих примитивов, который все используют в проде?
210 3337550
>>37457

> Может это есть в каком-то пакете общих примитивов, который все используют в проде?


Нет.
211 3337783
Ебать, а гошка то в России больше востребована чем я думал, мне казалось ей чисто озон играется, а оказывается есть вакухи от мтс, тинка, вб, 2гис, вк... бля, ламода
212 3338029
Гошники, как вы с этим живёте?

2 ИДЕНТИЧНЫХ варианта создания переменных (var, :=), различные махинации с данными - ОТДЕЛЬНЫЕ ПАКЕТЫ (strconv. прочие), функции расширения через магический синтаксис, интерфейсы...

Да что у вас не так с языком? У вас его читать почти нереально, программировать что-то еще больнее. Выглядит как-будто больной человек пытался сделать ЯП под шишками.

Горутины вообще жесть, реально какой-то шизофреник писал код под мефедроном, закусывая трусами школьниц.
Стикер512x512
213 3338051
>>38029

>Горутины вообще жесть, реально какой-то шизофреник писал код под мефедроном, закусывая трусами школьниц.


То ли дело асинк/авейт эталон элегантности!
214 3338070
>>38051
suspend, collectAsState, launch, await, flow.
Люблю котлин за этот элегантный способ работы с корутинами.
215 3338243
>>38029

>>Гошники, как вы с этим живёте?


Судя по тому что на нем пишутся отнюдь не рофлопроекты для попила бабла и в компаниях сильно выше уровнем чем "ОАО РОГА И КОПЫТА"...
Более чем отлично живем
216 3338337
>>37783
Авито ещё забыл, там сотни гоферов и платят збс. Самокаты всякие, Островки. Го реально выстрелил на российском рынке, работы дохуя.
217 3338350
>>38070

>suspend, collectAsState, launch, await, flow.


>Люблю котлин за этот элегантный способ работы с корутинами.


Чел! У тебя личерали весь рот в говне! Все эти launch это реально ебанная магия с неочевидными последствиями. Кто на каком пуле запускается, все эти неявные контексты и скоупы, это просто говно ебанное.

А Горутина это тупо еще один поток, в горутину и обратно все передается явно ручками. С горутинами конкурировать только вируальные треды могут, но точно не калорутины.
218 3338996
Сап, гопота. Через две недели вкатываюсь в онлайн школу на направление Go. Я 2 месяца мялся, очень мало изучал язык(пару часов в неделю). В итоге написал тестовое задание и поступил. Сейчас же имею проблемы с синтаксисом. Вечно вылетает из головы что-то, особенно все что, что использует точки в названии. Не знаю почему но такой синтаксис меня даже пугает, хотя это вроде как везде. В общем что можете посоветовать чтобы импрувиться? Для себя понял что наверное нужно больше практики, однако не знаю что лучше:делать учебные легкие задачки(скучно и не прибавляет мотивации), либо же запилить какой-никакой проект, что может быть трудно для меня. В общем, я в тупике.
219 3339089
>>38029
В го самая легкая и самая удобная и самая гибкая модель concurrency кода. Любой кто с этим спорит - долбоеб.
220 3339122
>>38029
Язык - ебаное говнище, кто ж спорит
А что делать? Зепку 350к на пыхе хуй выбьешь
221 3339123
>>37783
Охуеть, на языке, созданном для хайлоада и микросервисов, пишут хайлоад и микросервисы!
222 3339250
>>39123
Язык представляли как system programming language, про это даже на сайте было написано. Но когда стало понятно что бинари по 10 мегабайт с gc не очень подходят для системного программирования - стыдливо убрали 😌
223 3339689
>>39250

>system programming language


И тем не менее такие платформы как кубер и докер на нём написали. Я вот эмбед на нём пишу, на Orange Pi зерошках приложухи летают.
image.png361 Кб, 1246x944
224 3339724
>>39689
чтобы корабль не потонул все таки используются костыли для того чтобы укратить гарбаж коллектор
https://github.com/grafana/dskit/blob/main/ballast/ballast.go
225 3340296
Правда, что в вашу хуйню можно вкатиться только если ты зумер?
226 3340309
>>39089

> В го самая легкая и самая удобная


+

>и самая гибкая


А вот с этим поспорю.
Сможешь принудительно завершить выполнение горутины, узнать, крутится ли она еще и т.д?
Нет.
Гибкой такую модель определенно не назовешь.
Но удобство тут действительно есть, и легкость. Можно реально спавнить их и ничего не виснет, не вылетает. Но если бы у горутины был какой-то ID, по которому можно было бы выполнять с ней базовые операции, было бы более интересно, но тогда появилась бы возможность наделать трудно отлавливаемых ошибок, которая присутствует в других языках с фьючерами, асинк-эвейтами и этим вот всем.
В общем горутины - киллер-фича языка однозначно.
227 3340313
>>40309

>принудительно завершить выполнение горутины


Никто из современных, безопасных языков такое не позволяет делать. Тупо потому что проблем будет больше, чем профита.
228 3340315
>>40309

>Сможешь принудительно завершить выполнение горутины, узнать, крутится ли она еще и т.д?


>Нет.


Да, только придётся написать свой менеджер горутин строк аж на 100-200. Раздать горутинам айдишники и сделать мапу, куда по ключу из этих айдишников положить структурки с инфой о состоянии, контекст с отменой, можно коллбэков насыпать и управлять потрохами горутины − да что угодно тащемта можно.
229 3340398
>>37783
Да что-то нихуя он не востребованный уже. Все как писали на Java и плюсах, так и пишут
230 3340576
>>40315

> Да, только придётся написать свой менеджер горутин строк аж на 100-200. Раздать горутинам айдишники и сделать мапу, куда по ключу из этих айдишников положить структурки с инфой о состоянии, контекст с отменой, можно коллбэков насыпать и управлять потрохами горутины − да что угодно тащемта можно.


Только на практике твой менеджер соснет, когда некоторые горутины просто зависнут, потому что механизм прерывания должен быть встроен в саму горутину. Я с таким сталкивался. Когда горутина вызывает кучу кода из сторонних библиотек, активно работает с каким-то более менее сложным протоколом, хотя бы SSH. Сколько бы контекстов и таймаутов ты ни насыпал, всегда будет шанс зависания, причину которого сложно/невозможно отловить и устранить, и твой код будет иногда локаться на ожидании ответа от горутин, которые подвисли.
231 3340621
Ну что ж, у меня вторая попытка начать свой первый проект на го
232 3340639
>>40621
Что за проект?
233 3340646
>>40639
Первый
234 3340654
>>40639
Хочу сделать загрузчик файлов, так, чтоб он чекал ссылки на уникальность, занимался препроцессингом, т.е. чтоб парсил страницы если нужно и т.д.

В общем тут над архитектурой надо думать, но я пока всё в одном сервисе запилю, кроме воркера непосредственно загрузчика, его вообще можно на аутсорс отдавать, например yt-dlp, а то что я буду делать это интерфейс, т.е. веб-приложение на gin, ну и хранение ссылок.
image.png45 Кб, 814x216
235 3340792
кек оп инвалид
236 3340823
Двачую, на гошке написаны
Докер
Кубер
Прометеус
Хелм
Терраформ
Минио
Vault
Etcd
Traefik
Rancher
И даже GitLab Runner
237 3340830
>>40823
что это такое и зачем оно нужно
всю жизнь юзаю
нотепад два креста
пхп 5 недавно перешел на 7
денвер
вин рар
хдебиг
хмлхттпреквест
бэм
пхп му админ
мускуле 5.6
фар манагер
238 3340832
>>40830
Весь оркестр, что теперь требуется от бекендо-господина написан на ГОвне...
239 3340833
>>40832
НЕ ТУДА
СЮДА >>40823
240 3340852
>>40576

>Только на практике твой менеджер соснет, когда некоторые горутины просто зависнут, потому что механизм прерывания должен быть встроен в саму горутину. Я с таким сталкивался. Когда горутина вызывает кучу кода из сторонних библиотек, активно работает с каким-то более менее сложным протоколом, хотя бы SSH. Сколько бы контекстов и таймаутов ты ни насыпал, всегда будет шанс зависания, причину которого сложно/невозможно отловить и устранить, и твой код будет иногда локаться на ожидании ответа от горутин, которые подвисли.


Понял. Ну да, в теории такой шанс есть всегда. Но я не сталкивался, максимум контекст с дедлайном ставил и пукал 500, если долго крутит.
241 3341251
написал свое няшное айпи на гошечке
отдает по запросам джсоны
но встал хуй вопрос а что взять для фронта?
пробовал htmx но тогда придется переделывать все айпи ручки чтобы отдавали html и вообще связываться с шаблонами буееее
реакт учить не хочу и не буду
что брать то?
242 3341264
>>41251
svelte
243 3341382
>>41251
Напиши фронт на ncurses через CGo.
244 3341427
>>41251
Иди учи ангуляр. Во фронтенд без технологий фронтенда даже не думай лезть, бесполезное занятие.
245 3341443
>>41251
Мне Vue3 зашёл до этого ни на каких фреймворках не писал, только с шаблонами.
Я юзал Vuetify, но судя по всему это кал и есть более крутые фреймворки, например PrimeVue (но это не точно).
Пишется легко, если не нужна какая-то крутая логика, но для этого можно к гопоте обращаться за советами
246 3346575
>>41251
htmx это топ если не маляр - не нужно засирать свою репу всяким фронто говном, просто отдаешь файлики и кайфуешь. Если нужна красивость, то tailwind, который можно без ебучих js зависимостей просто выкачать и так же отдать или через cdn дать юзеру.
247 3346813
>>39089

>В го самая самая гибкая модель concurrency кода


Elixir
248 3346873
>>41251
Современный JS вполне себе может дергать апишки, да и манипуляции с DOM там ну +- на уровне JQuery. Почему бы не писать на нем?
00000.jpg22 Кб, 597x519
249 3347428
Бляяяя! Ёбаный рот!
Я сделал библиотеку, которую юзаю в нескольких своих проектах и зачем-то решил закинуть ее на гитхаб, чтобы не копировать файлики, а делать go get, import, все "по красоте".
Суть в том, что я не могу заставить го подтягивать новую версию своей охуенно нужной либы. Закоммитил в master, изменения есть. Пробовал go clean-modcache, затем go get -u github.com/путь/к_библиотеке - бесполезно. Я уже один раз с этим столкнулся, но как-то хуй пойми как через очко победил это, но не могу вспомнить как, просто блять как ебанутый нажимал везде и вставлял команды.
ПАМАХИТИ
250 3347430
В целом система модулей максимально уёбищная, хотя на первый взгляд и простая. Помню еще с год назад нужно было форкнуть библиотеку другого человека, клонировал ее, внес правки, запушил, но на свою библиотеку не давало сослаться из-за конфликта имен или чего-то еще, тоже долго ебался, ставил какие-то реплейсы в go.mod и в итоге тоже с 20 раза получилось. Абсолютно неуправляемое, не интуитивное говно, просто тянет то что скачало в самый первый раз.
251 3347433
Есть, разобрался!
1. Удалил go.sum #не уверен, что необходимо
2. Удалил ссылку на свою либу из go.mod
3. $ go clean -modcache #без этого один хуй тянет старую версию
4. $ go get -u github.com/user/lib
5. $ go mod tidy

Вопрос, а менее идиотски это можно было реализовать?
252 3347560
>>47433
Почитать документацию.
Что-то мне подсказывает, что год мод качает последний тэг, он у тебя уже есть, поэтому перекачки не происходит. Правильное решение - выпустить тэг. Рабочее - апдейтнуть по хэшу коммита (@hash после названия либы).
253 3347636
>>47560
Потому что должна быть опция скачать самую новую версию (последний коммит), а не хардкодить трехэтажные, человеконечитаемые версии в go.mod.
Тегов у меня нет.
254 3347718
>>47636
Ты совсем читать не умеешь? Опция есть, go get githib.com/zalupa/hui@last-hash, все, качается (мб форма слегка отличается, но идея такая).
Версия это тэг, коммиты сами по себе на версию не тянут.
Сначала научись читать на русском, потом на английском, только потом воняй на го мод блеать.
Обновить тред
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

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