Несин Данила
Всем привет! У меня возник архитектурный вопрос - выполняя определенные операции я могу подключаться к LDAP для выполнения различных операций. Для каждой операции я открываю новое подключение, закрывая его по завершении. Но так же возможно передавать функциям уже открытые подключения с целями переиспользования объектов - состояния гонки не будет, в любом случае операции выполняются последовательно. Как лучше и чем - открывать новые подключения к LDAP, для коротких операций (да и вообще к сервисам) или переиспользовать уже имеющиеся?
Несин Данила
Уточню, не на столько узким. Операция с Web-морды - Создать пользователя. В рамках обработки api запроса: Открыл подключение Запросил эталон Создал пользователя Навесил группы Закрыл подключение Сейчас каждая из операций открывает новое подключение. В таком случае переиспользование даст преимущество?
Несин Данила
Ну в плане создания пользователя - критично, но отвечает быстро
Null
Как преобразовать строку в целочисленный тип в Go? https://uproger.com/kak-preobrazovat-stroku-v-czelochislennyj-tip-v-go/ @Golang_google
🅞leksiy
Мне тут стало интересно, тут же много разрабов новичков. На сколько дженерики вообще ломают вам мозг? Ну вот хотя бы в этом примере? https://gotipplay.golang.org/p/nc5G75Ol2ol
🅞leksiy
Ну или кто-то может, не заглядывая в верхнюю ссылку поправить код здесь, чтобы он заработал? https://gotipplay.golang.org/p/FWPULhWTKSe
Alexander
разгадываешь головоломку как будто, но за этим нет какого-то смысла по итогу
🅞leksiy
Смысл есть
Alexander
да нет там смысла, чисто напряги мозг
Alexander
И вообще фейл из-за этого, если принтф не станет на дженериках сам func (c Car[S]) Move(meters S) { fmt.Printf("%s moved %v meters\n", c.Name, meters) }
Alexander
с таким же успехом можно interface{} использовать
Alexander
или Subtractable
🅞leksiy
И вообще фейл из-за этого, если принтф не станет на дженериках сам func (c Car[S]) Move(meters S) { fmt.Printf("%s moved %v meters\n", c.Name, meters) }
Пример может и искусственный, мопед не мой. На реддите чувак выложил, не работает. Я поправил и задумался.
🅞leksiy
Просто многие воспринимают дженерики как способ написать общую функцию.
🅞leksiy
Не понимая, что там на много все шире
Alexander
Пример может и искусственный, мопед не мой. На реддите чувак выложил, не работает. Я поправил и задумался.
ну ты мне показал этим, что дженерики могут заставить поломать мозг, если используются неумело
Alexander
полезный опыт
Anonymous
Не понимая, что там на много все шире
а например? где омжно почитать про это?
🅞leksiy
а например? где омжно почитать про это?
Например, у тебя есть дженерик тип A (с методами), эти методы могут содержать параметры этого типа, а так-же других дженериков, и типов, основанные одновременно на том и том 🤪 И вот нужно объявить интерфейс для данного типа A, чтобы заюзать как констреинт. И потом использовать в коде. Это реально может поломать
Ivan
начинал с джавы , так вот их <? extendet SomeType> слегка напрягали) сейчас вроде полегче читается)
🅞leksiy
а есть какой цикл статей или книжека чисто по дженерикам?)
Я толковой книги нигде не видел, а статей хватает, но 99% из них - треш, описывающий, как переделать функцию для поиска в срезе. Но вообще есть с примерами кода, типа таких: https://blog.walkergriggs.com/2021/12/15/learning_go_generics_with_aoc/
🅞leksiy
https://gotipplay.golang.org/p/mbrOoHYipXf Если кому-то интересно по теме, пример более рабочий. Но и без интерфейсов, попроще
Ivan
пока что только общие структуры на голову приходят. я написал связанный список. на его основе очередь с возможностью удаления. и пока все
Ivan
type Queue[K comparable, V any] struct { l *list.List[entry[K, V]] v map[K]*list.Element[entry[K, V]] }
Ivan
еще бы найти список того, какие структуры будут в стандартой либе. что бы не писать свои структуры на жинериках)
Ilnur
с таким же успехом можно interface{} использовать
ну union-тип и тип any - тут разница прям пропасть
Alexander
1
Alexander
или Subtractable
Alexander
ну union-тип и тип any - тут разница прям пропасть
ASP
всем привет,скачал установил postgres но не могу подключить его в ide,вбиваю username - postgres,пароль postrges всплывает ошибка The specified database user/password combination is rejected: [28P01] ВАЖНО: пользователь "postgres" не прошёл проверку подлинности (по паролю)
🅞leksiy
И вообще фейл из-за этого, если принтф не станет на дженериках сам func (c Car[S]) Move(meters S) { fmt.Printf("%s moved %v meters\n", c.Name, meters) }
Ты же понимаешь, что там нет никакой имплементации? Это заглушка. Какой смысл говорить о принтф? Его нет там.
🅞leksiy
Ubuntu у меня
Уже лучше, а как устанавливал пароль постгреса?
ASP
Уже лучше, а как устанавливал пароль постгреса?
Никак,разве postgres автоматом не ставит при установке ?
🅞leksiy
$ sudo -u postgres psql ALTER USER postgres PASSWORD 'myPassword';
🅞leksiy
при установке ставится
Но зависит от установки
🅞leksiy
А информации сложно добиться
🅞leksiy
Хоть ОС выяснили)
ASP
$ sudo -u postgres psql ALTER USER postgres PASSWORD 'myPassword';
сделал,все без ошибок,теперь когда опять вбиваю в иде postgres и новый пароль опять ломается
ベクゾッド
сделал,все без ошибок,теперь когда опять вбиваю в иде postgres и новый пароль опять ломается
Создай другого юзера и пароль к нему. В линуксе обычно user postgres аутентифируется как peer пользователь
Alexander
Ты же понимаешь, что там нет никакой имплементации? Это заглушка. Какой смысл говорить о принтф? Его нет там.
я считаю, что пример должен быть минимально жизненным. и если есть сложность, то она должна быть оправдана, иначе мозг не может составить связи достаточно быстро
Alexander
это весело в начале решать головоломки ради головоломок, но тут хочется плеваться
Alexander
потому что опять же все бы решилось интерфейсом
Alexander
ровно то же самое по производительности бы вышло
🅞leksiy
потому что опять же все бы решилось интерфейсом
Тебе написать там реальный пример, на тысячу строк, чтобы пару строк дженериков вставить?
Alexander
не надо тысячи строк
Alexander
смысл функции в низу вообще не понятен
Alexander
зачем еще исходное оборачивать в какую-то непонятную функцию
🅞leksiy
В ней смысла нет
🅞leksiy
Но она на столько простая, что я ничего не убирал, и так все ясно
🅞leksiy
Вобщем автор вопроса скинул ту ссылку, которая постом ниже, не работающую
Alexander
Но она на столько простая, что я ничего не убирал, и так все ясно
это тем более делает понимание труднее. зачем она там? что она делает? почему нельзя было без нее?
Alexander
такие вопросы возникают
🅞leksiy
Априори не должно делать понимание труднее)
Alexander
не знаю, все обучающие материалы пытаются создать что-то осмысленное, тут же смысла ноль целых ноль десятых. и они неспроста пытаются хоть какой-то смысл изобразить
🅞leksiy
Это не обучающие материалы, я же писал
🅞leksiy
Это реальная задача чудика, не мне судить)
Alexander
ок. пример из реальности тоже что-то делает, да не всегда очевидно, но что-то. ты замотивирован разобраться, понимаешь, что криво или просто сложно, но вот так чего-то добились. а тут чисто головоломка
🅞leksiy
Когда скидываешь код, упрощаешь его. Возможно он упрощен до такой степени, что метод и функция обертка урезаны до таких
Alexander
я не понимаю, что эта функция хотела сделать, но я бы допустим какой-то объект Position внутри Car засунул, который бы как раз зависел от параметра, и который бы менялся через Move
Alexander
и тип бы сузил до float32, float64 - тогда было бы понятно, что мы можем пожертвовать точностью, например тащемта
🅞leksiy
Ладно, сложновато дискутировать, зрение еще не до конца восстановилось) Еле читаю и пишу)
Alexander
но это бы тоже был пример высосанный из пальца
Alexander
ок =)
Alexander
Как это сделать?
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
Хайти🏴
if <-ch1 != <-ch2 {return false}
кстати ты тут возвращаещь только первое значение из каналов
Ivan
я только подсказал, а возвращает автор кода)
Хайти🏴
тоже верно)
Krestina
Ребят, помогите найти RTB эксперта. Стек гоу, + планируем кликхаус. Подробности в личку, плиз