Artur
Кстати, я все еще ищу людей, студентов или просто желающих помочь/подзаработать для придумывания задач по языку Go. Задачи как по теории так и практические. Темы разные. Деньги: от 100 до 1000 рублей за задачу (зависит от сложности задачи). Писать в ЛС.
Ваня Гречка
1 - 50 2 - 1000 3 - 2000 4 - 200 5 - 700 6 - 800 7 - 900 8 - 1000 9 - 5000 10 - 11000
Кіт ✙
скажите, при -benchmem, что за колонка - B/op? Это операции на хипе? Как они измеряются?
Danil👽
Ребят, а кто может рассказать как работает evacuation в мапах
Илья
Ребят, а кто может рассказать как работает evacuation в мапах
Из исходников: ...... Buckets are incrementally copied from the old bucket array to the new bucket array. ........ When growing the table, iterators remain iterating through the old table and must check the new table if the bucket they are iterating through has been moved ("evacuated") to the new table. Грубо говоря при поиске твоего ключа мапа пытается перемещать данные в новые бакеты, проверяя при поиске как новые, так и старые
Илья
В некоторых случаях может просто очищать ключ, т.к. сборщик потом сам почистит значения
Илья
не, перемещение только изменении/удалении происходит
https://github.com/golang/go/blob/master/src/runtime/map.go#L487 хм, отталкивался от этого
Vladislav
https://github.com/golang/go/blob/master/src/runtime/map.go#L487 хм, отталкивался от этого
https://github.com/golang/go/blob/0a6c4c87404ecb018faf002919e5d5db04c69ee2/src/runtime/map.go#L203 это чутка не то
Илья
Илья
Можно сойтись на том, что мапа не копирует все значения сразу при расширении (как append()), а просто ищет в двух мапах списках бакетов
Илья
Но было бы неплохо изучить, никогда этим не интересовался
Vladislav
growWork() вызывается только mapassign и mapdelete а growWork эвакуацию дергает
Илья
вроде выглядит логично
Vladislav
https://github.com/golang/go/blob/0a6c4c87404ecb018faf002919e5d5db04c69ee2/src/runtime/map.go#L1152 там тудушка забавная
Eugene
Я когда вижу, что пишет Владислав
Eugene
думаю о другом
Eugene
@illiadimura согласен?
Илья
Eugene
надо будет сына назвать Владиславом
Vladislav
Илья
я иногда херню пишу🤣
как видишь, я тоже
Артем
Господа, доброе утро. Сорян за тупой вопрос. Подскажите, пожалуйста, как правильно организовать работу с бд. У меня несколько запросов отдельными функциями. Нужно ли в каждой из них вызывать sql.Open или можно более грамотно сделать?
Артем
Я ж правильно понимаю, open нужно один раз вызывать и потом использовать везде, но как это сделать на уровне модуля, чтоб определить handler и потом юзать везде
kostyaBro
Я ж вроде вчера отвечал на это🤔
Артем
Я ж вроде вчера отвечал на это🤔
Да, отвечал, честно пытался разобраться, не понял нифига.
Siva
Hcl or Cognizant which is better for no work pressure
Артем
Я ж вроде вчера отвечал на это🤔
У меня проблема вытекает если ч глобально его определяю, если не использовать клиента, то tcp i/o timeout вылезает
Артем
Если потом еще раз запрос кинуть то он просыпается
Артем
Я допустим сделал var db = database.NewClient(…) И юзаю эту дб потом для запросов, то он мне кидается i/o таймаут если первый раз запрос кидать, потом все ок, но спустя 10 секунд примерно опять кидает таймаут
Илья
какие запросы делаешь?
Артем
какие запросы делаешь?
Селекты обычные
Илья
https://go-database-sql.org/ вот сайт с полным гайдом, но у меня он перестал открываться
Илья
Селекты обычные
можешь показать в коде?
Илья
defer rows.Close() делаешь?
Артем
Артем
defer rows.Close() делаешь?
Там вроде он внутри закрывает, если не ошибаюсь
kostyaBro
и не стоит хранить коннект к бд в х
kostyaBro
В х это где?)
ой, не дописал в хендлере
Артем
можешь показать в коде?
Могу только экран пофоткать к сожалению
kostyaBro
и глобальное тоже не ок потом рефакторить больно
Артем
и не стоит хранить коннект к бд в х
Да я вот и не хочу хранить, любо глобально юзать, либо через параметр прокидывать
kostyaBro
вот да, создать объект бд, репозиторий который умеет делать что надо и прокидывать как параметр
kostyaBro
хотябы так
kostyaBro
но вообще почему таймауты, странно где бд находится?
kostyaBro
Могу только экран пофоткать к сожалению
хотябы так, уже понятнее будет
Артем
А может эта хрень быть из за того, что я 3 запроса в горутинах делаю? Я не очень с бд просто, они синхронны асинхронны или как вообще
kostyaBro
ахах, конечно по большей части асинхронны
kostyaBro
но ты можешь написать запросы так что залочишь выполнение последущих
Артем
Если в кратце
Alexander
дак может return err
Alexander
точнее даж без err
Артем
А ну кстати да, щас
Alexander
return db.GetContext и т.д
Артем
Артем
Это я про себя
Alexander
Я 100 раз так делал)
Илья
Если в кратце
а как их в горутинах вызываешь?
kostyaBro
У тебя может так контекст с таймаутом сгорать просто?
Илья
как вариант
Артем
У тебя может так контекст с таймаутом сгорать просто?
Ну вообще я тут контекст на 10 секунд кидаю
Артем
Ну вот блет
kostyaBro
Ещё в оракл вроде надо коммитить каждый вызов
Артем
Я сейчас потестил, подождал, ничего не отваливается
Артем
Может на серваке проблема?
kostyaBro
Но это предположение. Я помню где-то была херота что запись делаешь, и в бд видишь её, но так как не закомитил, записи нет
kostyaBro
И вроде это был оракл
Артем
У меня селекты тупо, в базу не пишу ничего
kostyaBro
Но я смутно помню что точно было. При том что транзакцию не открывал а коммит нужно всеравно было
kostyaBro
У меня селекты тупо, в базу не пишу ничего
Не суть я вспоминаю свою ситуацию
Артем
Хм, спасибо большое всем, короче надо мне бд подтягивать а то глуховат немного в этом
kostyaBro
Покажи как вызываешь всеже
Илья
Я бы убрал errgroup и вызывал последовательно
Илья
потому что у тебя на один запрос юзается три коннекта к бд