Илья
it is possible, but not everywhere
Well, it depends on what actually "zero" means: only the heap or memory at all
Melbourne Channel
it is possible, but not everywhere
Yup. But asmgo will solve all these alloc issues. Right? For me zero alloc for golang means no need gc.
Кіт ✙
in go you cannot calculate everything on stack, because you mostly share objects between goroutines
Илья
Илья
asm can only reduce the stack allocations, but in result the data will be placed in heap
Кіт ✙
Well, it depends on what actually "zero" means: only the heap or memory at all
usually "zero allocations" means that framework makes no allocations on average. But it still requires to warm-up internal buffers and pools. So yes, you're right
Akim
Why are you worrying about performance so much? There is no silver bullet to make things less memory consuming without other performance tradeoffs
Кіт ✙
asm can only reduce the stack allocations, but in result the data will be placed in heap
stack allocations are free, so I think it is not a thing we have to think about. Usually, when somebody wants to write something with assembler, he is supposed to know what he is doing. Otherwise, compiler will always generate more optimised code
Илья
Why are you worrying about performance so much? There is no silver bullet to make things less memory consuming without other performance tradeoffs
потому что все хотят blazing fast не понимая, нафига оно им нужно
Melbourne Channel
Why are you worrying about performance so much? There is no silver bullet to make things less memory consuming without other performance tradeoffs
Gc is the worst thing for golang when the traffic usage is huge. My experience is the lesser the alloc the better.
Sanity = nil
@kostyaBro мож скинуть свой конфиг нвима? а то меня заебало то что после добавления модулей надо перезагружать проект, супер неудобно
Akim
If you worry about gc probably you need to switch to no-gc languages like c++ and rust.
Кіт ✙
it's cheaper to start one more instance of application instead of optimising code until it'll be unreadable and unmaintainable
Vladimir
👣 Тестовое задание для Golang разработчика Тестовое задание для кандидата на должность Golang разработчика. Описание Есть внешний сервис, который обрабатывает некие абстрактные объекты батчами. Данный сервис может обрабатывать только определенное количество элементов n в заданный временной интервал p. При превышении ограничения, сервис блокирует последующую обработку на долгое время. Задача заключается в реализации клиента к данному внешнему сервису, который позволит обрабатывать максимально возможное количество объектов без блокировки. Приводить реализацию внешнего сервиса необязательно! Определение сервиса: package main import ( "context" "errors" "time" ) // ErrBlocked reports if service is blocked. var ErrBlocked = errors.New("blocked") // Service defines external service that can process batches of items. type Service interface { GetLimits() (n uint64, p time.Duration) Process(ctx context.Context, batch Batch) error } // Batch is a batch of items. type Batch []Item // Item is some abstract item. type Item struct{} Требования - язык программирования Golang. - решение должно быть в git-репозитории (можно прислать архив или опубликовать на github, gitlab, bitbucket...). Пожелания - документирование кода; - тесты; - использование статического анализатора (конфигурацию положить в репозиторий). Варианты решений можно присылать в комментарии. ❤️, если нравится такие задачи. @Golang_google
Извините, нужно в комментарии присылать? Или куда?
Vladimir
никуда, это просто скинули
эх, буду знать, спасибо
Илья
эх, буду знать, спасибо
но можешь сюда скинуть
Vladimir
👣 Тестовое задание для Golang разработчика Тестовое задание для кандидата на должность Golang разработчика. Описание Есть внешний сервис, который обрабатывает некие абстрактные объекты батчами. Данный сервис может обрабатывать только определенное количество элементов n в заданный временной интервал p. При превышении ограничения, сервис блокирует последующую обработку на долгое время. Задача заключается в реализации клиента к данному внешнему сервису, который позволит обрабатывать максимально возможное количество объектов без блокировки. Приводить реализацию внешнего сервиса необязательно! Определение сервиса: package main import ( "context" "errors" "time" ) // ErrBlocked reports if service is blocked. var ErrBlocked = errors.New("blocked") // Service defines external service that can process batches of items. type Service interface { GetLimits() (n uint64, p time.Duration) Process(ctx context.Context, batch Batch) error } // Batch is a batch of items. type Batch []Item // Item is some abstract item. type Item struct{} Требования - язык программирования Golang. - решение должно быть в git-репозитории (можно прислать архив или опубликовать на github, gitlab, bitbucket...). Пожелания - документирование кода; - тесты; - использование статического анализатора (конфигурацию положить в репозиторий). Варианты решений можно присылать в комментарии. ❤️, если нравится такие задачи. @Golang_google
Melbourne Channel
I dunno about u guys but my biggest problem with golang now is crypto tls speed. Waiting for ktls to be possible with golang. Anything other than haproxy frontend tls terminator is considered slow as a reverse proxy but having just golang running is best possible scenario even if tls termination is slow a bit. Wonder when ktls will happen. Without tls, 50k req/s, with tls, 10k req/s.
Melbourne Channel
Ethereum developers used C for tls inside go
U know where the code is? I wonder why not widely known or not popular mainstream
Vladimir
но можешь сюда скинуть
Конечно, работает не совсем так, как нужно, но я пытался
Melbourne Channel
Did you try using nginx as https proxy?
22k nginx, 28k haproxy. The overhead of unix domain socket and extra memory is not very satisfying
Илья
22k nginx, 28k haproxy. The overhead of unix domain socket and extra memory is not very satisfying
TLS is a priory slower than pure http. I think that with haproxy (or other C-based proxy) you will achieve the maximum rps which your server can ever proceed. Another variant is to scale your sever (run multiple instances) and place load balancer (like nginx)
kostyaBro
@kostyaBro мож скинуть свой конфиг нвима? а то меня заебало то что после добавления модулей надо перезагружать проект, супер неудобно
Он пока не закончен у меня. Относительно недавно решил с нуля на lua написать Посути там только telescope lsp vim-go и статус бар. Руки не дошли даже дерево настроить
Sanity = nil
Каких модулей?
голенг модулей
kostyaBro
голенг модулей
А либы? Слушай интересный кейс, не сталкивался надо бы перепроверить.
Sanity = nil
кароче я добавляю модуль с помощью go get ... и go mod tidy и он добавляется вместе с линтером и автокомплитом только после перезапуска проекта, :update не помогает, то есть при больших проектах чтобы добавить модуль, приходится супер неудобно, закрывать проект, открывать заново(соответственно все буфера открытые приходится открывать заново) и вообщем непродуктивненько получается
kostyaBro
да я понял в чем проблема позже проверю так ли у меня Я не всегда пишу в nvim еще
Sanity = nil
мне прост вскод противен а голенд не могу получить пушо учусь в говноунике😢
Илья
мне прост вскод противен а голенд не могу получить пушо учусь в говноунике😢
Возможно, что я через год тоже перестану быть адептом голенда и стану nvim чадом
Илья
@thdonatello посмотри апи гитхаба и через него достань
Макс
Привет! Ребят, подскажите плиз нулю, как понять все это. Есть задачка - через api достать из гитлаба mr, в description которого есть строка "АВС-123" Смотрю на либу https://github.com/xanzy/go-gitlab/blob/v0.72.0/merge_requests.go#L237 конкретно эту функцию. А что ей передать нужно не вдупляю. с GO второй день общаюсь (
Макс
по api нужно id проекта и параметры поиска, а как это через такую функцию вписать ваще не пойму (
kostyaBro
мне прост вскод противен а голенд не могу получить пушо учусь в говноунике😢
Понятно. У меня была куплена подписка на все jetbrains IDE. Потом санкции и пока бесплатно сижу. Кстати ранее просто через Jetbrains toolbox качал раз в месяц новую версию. Беток много
kostyaBro
Давай к нам на VSCode ))))
Он мне не нравится
Yegor
Он мне не нравится
Да и то и другое пакость , просто одно я яве другое на яваскрипте )
kostyaBro
бесплатно сижу эт тип через крак? он норм работает?
Не кряк, просто jetbrains когда ушли оставили людей с подписками но не берут денег
Sanity = nil
и ты получается каждый месяц перекачиваешь перенастраиваешь всю эту штуку?
kostyaBro
Но возможно это только на год
Кіт ✙
мне прост вскод противен а голенд не могу получить пушо учусь в говноунике😢
подавался через гитхаб, будучи школьником. Там моя школа даже в списке не числилась. Через неделю одобрили
Sanity = nil
подавался через гитхаб, будучи школьником. Там моя школа даже в списке не числилась. Через неделю одобрили
я тоже подавался, мой уник добавили в список, но чтобы получить нужно чтобы они подтвердительное письмо на униковскую почту кинули(здесь должна была бы быть корпоративная студентская почта, но у нас ее нет😢)
kostyaBro
Ну давно это делал, работало спокойно. Потом деньги появились нормальные.
Илья
russia moment в общем
Sanity = nil
я просто загрузил фотку справки о том, что я учусь в такой-то школе, мыло не указывал. Норм
а это я тож пробовал, студенческий свой, меня послали нахуй (дважды)🤣
Кіт ✙
в общем, удачи тебе там с этим
bagardavidyanisntreal
👣 Тестовое задание для Golang разработчика Тестовое задание для кандидата на должность Golang разработчика. Описание Есть внешний сервис, который обрабатывает некие абстрактные объекты батчами. Данный сервис может обрабатывать только определенное количество элементов n в заданный временной интервал p. При превышении ограничения, сервис блокирует последующую обработку на долгое время. Задача заключается в реализации клиента к данному внешнему сервису, который позволит обрабатывать максимально возможное количество объектов без блокировки. Приводить реализацию внешнего сервиса необязательно! Определение сервиса: package main import ( "context" "errors" "time" ) // ErrBlocked reports if service is blocked. var ErrBlocked = errors.New("blocked") // Service defines external service that can process batches of items. type Service interface { GetLimits() (n uint64, p time.Duration) Process(ctx context.Context, batch Batch) error } // Batch is a batch of items. type Batch []Item // Item is some abstract item. type Item struct{} Требования - язык программирования Golang. - решение должно быть в git-репозитории (можно прислать архив или опубликовать на github, gitlab, bitbucket...). Пожелания - документирование кода; - тесты; - использование статического анализатора (конфигурацию положить в репозиторий). Варианты решений можно присылать в комментарии. ❤️, если нравится такие задачи. @Golang_google
https://github.com/bagardavidyanisntreal/external-batching
bagardavidyanisntreal
имхо, думаю, что немного не туда пошёл с прокидыванием duration в ctx cancel
bagardavidyanisntreal
https://github.com/bagardavidyanisntreal/external-batching
тут можно было еще засемафорить, но потом понял что бач в единицу времени и забил
Vladimir
https://github.com/bagardavidyanisntreal/external-batching
Я немного не понял, что у тебя написано. Если я прав, то у тебя приходит массив и элементы этого массива через задержку отправляются в сервис. Наверное я просто не понял задание, но я делал так, типа у нас сервис определенное время может принимать элементы и нужно их отправить как можно больше за этот промежуток и не получить ошибку (о том, что время закончилось).
Vladimir
имхо, думаю, что немного не туда пошёл с прокидыванием duration в ctx cancel
Из-за того, что я, скорее всего, не так понял задание я и прокинул dur в ctx, так как через это время ctx должен отменится.
bagardavidyanisntreal
Из-за того, что я, скорее всего, не так понял задание я и прокинул dur в ctx, так как через это время ctx должен отменится.
да =) я тоже примерно так изначально понял, но потом обратил внимание, что первый запрос к сервису возвращает количество и duration и просто прикинул, что скорее всего, это про разницу инпута на нашей стороне и капасити внешнего сервиса
bagardavidyanisntreal
👣 Тестовое задание для Golang разработчика Тестовое задание для кандидата на должность Golang разработчика. Описание Есть внешний сервис, который обрабатывает некие абстрактные объекты батчами. Данный сервис может обрабатывать только определенное количество элементов n в заданный временной интервал p. При превышении ограничения, сервис блокирует последующую обработку на долгое время. Задача заключается в реализации клиента к данному внешнему сервису, который позволит обрабатывать максимально возможное количество объектов без блокировки. Приводить реализацию внешнего сервиса необязательно! Определение сервиса: package main import ( "context" "errors" "time" ) // ErrBlocked reports if service is blocked. var ErrBlocked = errors.New("blocked") // Service defines external service that can process batches of items. type Service interface { GetLimits() (n uint64, p time.Duration) Process(ctx context.Context, batch Batch) error } // Batch is a batch of items. type Batch []Item // Item is some abstract item. type Item struct{} Требования - язык программирования Golang. - решение должно быть в git-репозитории (можно прислать архив или опубликовать на github, gitlab, bitbucket...). Пожелания - документирование кода; - тесты; - использование статического анализатора (конфигурацию положить в репозиторий). Варианты решений можно присылать в комментарии. ❤️, если нравится такие задачи. @Golang_google
ну да
Vladimir
ну да
понял, спасибо большое)
Yegor
У меня у одно какой день со сборкой докеров проблемы , то с реп деба пакеты не тянутся , теперь альпине линь в облаке амазона
Илья
типо latest или 6.5.8 не тянуться, но 7.0 нормально
Florian Geyer von Giebelstadt
Привет.Учусь апишки на го делать,столкнулся с такой ошибкой: failed to initialize db: pq: password authentication failed for user "postgres" К самой базе коннект идёт,в конфиге данные указаны корректно. У меня подозрения на import _ "github.com/lib/pq". Кто-нибудь сталкивался с такой проблемой?
Florian Geyer von Giebelstadt
База в докере.По данным из конфига захожу в базу. Аутентифицироваться в ручную получается
Vladislav
ну проверь правильно ли прописано для докера и как подхватывается
Florian Geyer von Giebelstadt
Перепроверил уже.Всё пересоздал второй раз
Vladislav
и самое веселое, к тому ли слону подключаешься🤣
Andrey
В докере
Покажи строку запуска докера