engelbart
Разные там инстансы объектов
engelbart
Я хочу хранить их в контексте, не всё, но многое, и так сократить число вот этих параметров.
engelbart
Пока норм звучит?
engelbart
Ну на савмом деле процесс не такой прямо линейный, там это нужно и для тестов, и для возможности таймаут повесить, в таком ключе. Т.е. вроде как контексты это про то.
engelbart
Но вот что меня волнует, действительно ли я должен каждую свою функцию переписать в виде func bla( ctx *Context, a,b,c)
engelbart
Или есть способ другой внутри неё, каким то образом достучаться до parent context?
Илья
1) да, 2) интерфейс конекста не предоставляет такого
engelbart
Т.е. если скажем я упоролся, то я смогу просто сделать глобальныё контекст синглотонои или там переменной пакета
engelbart
Но во всей видимости это что то misuse какое то
Oleksii
Но во всей видимости это что то misuse какое то
вообщё, использование контекста для хранения и передачи зависимостей, которые не request-scoped - это плохой тон
engelbart
ну, в каком то смылсе у меня request-scoped
engelbart
про выполняемую задачу данные идут
Oleksii
ну, в каком то смылсе у меня request-scoped
в любом случае нужно осторожно с этим быть, потому что читаемость и понимание кода может ухудшиться в разы
engelbart
это да, понимаю
engelbart
Плюс наверное дорого?
Oleksii
Этим не интересовался, может кто-то опытнее сможет ответить на этот вопрос
Oleksii
Но думаю, что дороже
Vasily
Он не предназначен для этого
Vasily
КОнтекст всегда request scoped
Vasily
Вернее ты конечно можешь, но делать так не надо
engelbart
Я понял, да. У меня есть маленькая натяжжка, но всё таки он request scoped, я там как глобальную мапу не использую. Передаю только то что используется в ответе на эту задачу
Vasily
Если ты прямо очень-очень=очень-очень-очень хочется таскать это таким образом - сделай свой контект, где у тебя твои зависимости явным образом являются полями контекста ( без WithValue и пустых интерфейсов )
Vasily
Чтобы все операции с ними проверялись compile-time
Vasily
По крайней мере ты уменьшишь веротность выстрелить себе в голову
Vasily
Но смотри чтобы не получалось параллеььного апи за счет этого дела
engelbart
Вот это отличный совет, спасибо!
Alexander
а как не сделать паралельного апи?
Alexander
как сделать контроллер синхронным?
Илья
не плодить новых контекстов? хотя не понял, о чем Вася :)
Maksym
привет
Maksym
нужна помощь от гуру :)
Maksym
кто-нибудь подскажет как правильно работать с sql в го? начинаю тестировать свой проект и валиться ошибка pq all connection already in use
Anonymous
изучи, там все проблемы и подводные камни.
Alexander
соединение разорвал раньше времени
Alexander
код бы еще увидеть...
Igor
Помогите, вот скажем у меня есть много старого кода, там функции туда сюда вызываются, и надоело что надо ну просто толпы зависимсотей передавать между ними.
https://en.wikipedia.org/wiki/Dependency_injection В динамических языках есть контейнеры, в java - билдеры https://en.wikipedia.org/wiki/Builder_pattern Может в эту сторону посмотреть
Anonymous
соединение разорвал раньше времени
подозреваю просто не закрываются результаты. в этом случае не отпускается коннект и пул весь становится занят. про это написано в ссылке что я кидал
Илья
Илья
ну и ++, если в тестах ты пересоздаешь коннекты, не закрывая старых, та же фигя будет
Maksym
pgpool нет, в проекте человек я новый, вникаю вот. и да, рез-ты не закрываются
Maksym
такое всегда есть, тут вопрос, наверное, в тестах
Anonymous
тут про получение результатов http://go-database-sql.org/retrieving.html
Anonymous
http://go-database-sql.org/connection-pool.html go могет пулинг из коробки
могет но не всегда можно расчитать макс число коннектов к бд от всего сервиса. поэтому все равно всякие баунсеры полезны
Ilya
я бы его вообще не пользовал.
Maksym
нет, не настраивал никакие из параметров вообще
Michael
драйвер го для постгреса и так с пулом работает
Michael
ну тогда настрой
Michael
по умолчанию в самом постгресе лимит этот где-то равен 100
Maksym
я честно говоря в таком деле новичок, интересно узнать какие значения являются оптимальными?
Maksym
я ставил всегда maxCons = 2 * cpu, idle = cpu
Michael
я для себя делал кол-во соединений = кол-ву ядер цпу на машине с постгресом
Ilya
мало
Michael
мало не мало хз, в зависимости от задач
Michael
2*цпу ещё куда ни шло
Anonymous
да подождите вы с коннектами
Anonymous
стандартное колво коннектов 300
Anonymous
врядли правильной работой простого скрипта это можно превысить
Anonymous
скорее всего не закрываются результаты
Michael
если кол-во рутин не ограничевается и активных подключений дофига
Michael
то оч легко
Michael
func (*DB) SetMaxOpenConns и 300 шутка про тракториста
Michael
в 9.6 пока ещё max_connections = 100
Aleksandr
http://www.golangprograms.com/data-structure-and-algorithms.html
Anonymous
еще если запросы update/delete, у которых нет returning конструкции, то со стороны го надо юзать метод exec вместо query, он не ждет результатов в ответ и сразу освобождает коннект
Anonymous
но про это как и про все остальное тоже написано на сайтике
Anonymous
Anonymous
http://go-database-sql.org/retrieving.html
Anonymous
http://www.golangprograms.com/data-structure-and-algorithms.html
http://www.golangprograms.com/data-structure-and-algorithms/golang-program-for-implementation-of-linear-search.html range не дает никакой оверхед при линейном поиске? в какой-то древней статье жаловались что он кажется копирует данные. по бенчмаркам я пробовал именно тайминги между ренджем и просты перебором через цикл одинаковы.
Илья
for _, item := range datalist - такая форма делает копию
Илья
но, типо аллокация на стэке, и, если у тебя там не массив из болльших объектов, не должно быть принципиальной разницы
Илья
я, если не уверен в размере, итерируюсь просто через for num := range
Илья
for counter, item := (создает локальную копию слайса/массива)