@proGO

Страница 1293 из 1674
FRD Official - Dmitriy
18.03.2018
07:37:11
Рекомендую sqlboiler, чутка доки покурить надо конечно, но потом втянешься

Mykyta
18.03.2018
07:51:37
А gorm - ослобык, и не быстрый и не человечный
А еще на нем можно таких проблем огребсти случайно, что просто пиздц. Я его больше года использую (сейчас бы я его, конечно, не выбрал, но и не я его выбирал вначале). Например если сделать db.Delete("users").Where("id = ?", id) то вы снесете всю таблицу юзеров, лол

?
18.03.2018
08:00:27
жесть)

FRD Official - Dmitriy
18.03.2018
08:04:17
Капец

Google
Michael
18.03.2018
08:16:31
типа чистый sql лучше?

Yuriy
18.03.2018
08:20:09
Всем привет! Народ, подскажите как происходит освобождение памяти и как правльно это сделать? Есть такой код: type SomeObject struct { data string } func NewObject() *SomeObject { obj:=&SomeObject{ data: "default value", } return obj } func main() { var list map[int]*SomeObject list[0]=NewObject() log.Println(list[0].data) delete (list,0) } Насколько я понимаю delete удаляет только указатель, а память остается занятой структурой. Как удалить (delocate memory) саму структуру из памяти?

Mykyta
18.03.2018
08:22:31
Почему так?
Ну потому, что gorm сначала выполнит Delete, а потом только Where (точнее он его проигнорирует). По задумке Delete надо писать как Delete("users", "id = ?", id)

Влад
18.03.2018
08:22:44
Ахаххахах.

Kirill
18.03.2018
08:24:01
Rand.intn(10) < 3 даже
Надо же ещё сид через время юникс задать и тогда по ОТВ все абсолютно верно

Arch
18.03.2018
08:24:35
Т.е. если на созданную структур нет указателей, то GC её автоматом позже почистит ?
Но! будьте внимательны, если у вас останется где-то горутина, которая крутится сама по себе, безз всяких каналов управления, то этот мусор может жить вечно, тк внутри этих горутин указатели еще существуют и GC его не соберет

Google
Mykyta
18.03.2018
08:25:06
типа чистый sql лучше?
Ну да, лучше использовать билдеры запросов типа squirrel

Yuriy
18.03.2018
08:25:19
delete просто удаляет элемент из хеш-таблицы, больше он вообще ничего не делает
Вот это меня навело на размышление... что удаляется только элемент мапы...

Arch
18.03.2018
08:25:45
Особенность, потому как GC тормозит основной поток чтобы собрать мусор, что негативно отразится на реалтайм данных

Mykyta
18.03.2018
08:26:26
Arch
18.03.2018
08:27:12
Интересненько
те если вы будуте генерить постоянно большое число объектов, то даже при выводе в лог, сможете увидеть как GC тормозит рантайм для сбора мусора....

Kirill
18.03.2018
08:27:31
Особенность, потому как GC тормозит основной поток чтобы собрать мусор, что негативно отразится на реалтайм данных
А что конкретно происходит когда я создаю ререиенную и не использую ее в коде?Почему выдаеь ошибку компиляции?

Yuriy
18.03.2018
08:27:58
Но! будьте внимательны, если у вас останется где-то горутина, которая крутится сама по себе, безз всяких каналов управления, то этот мусор может жить вечно, тк внутри этих горутин указатели еще существуют и GC его не соберет
Да. Это понимаю... В итоге остается только неактивная структура без указателей на нее... Поэтому хотел убедиться, что при создании таких структур и последующем удалении указателей на них память не засрется...

Arch
18.03.2018
08:28:51
А что конкретно происходит когда я создаю ререиенную и не использую ее в коде?Почему выдаеь ошибку компиляции?
Компилятор не пропускает такое варворство, тк по логиге разрабов нечего плодить переменные которые ведут в никуда, по началу жудко бесит, но потом смиряешься

Kirill
18.03.2018
08:31:21
Компилятор не пропускает такое варворство, тк по логиге разрабов нечего плодить переменные которые ведут в никуда, по началу жудко бесит, но потом смиряешься
Есть такое. Хотя чуствую себя иногда мол меня оградили в памяти. После Java довольно интересный был этот момент и дофига моментов синтаксиса хотя-бы то, что точки с запятой не нужно ставить , скобки в циклах и условиях ,а так же отсутствие while .

Kirill
18.03.2018
08:32:28
Mykyta
18.03.2018
08:32:58
Так в доках вроде это и написано было
ага, я использую горм еще с тех времен, как чтобы разобраться как он работает, приходилось лезть в исходники и тесты, так что я на нем собаку съел.

Kirill
18.03.2018
08:33:10
Ну это скорее для читаемости кода, чтобы другой после тебя сел и смог разобраться что к чему
Я понимаю,но отсутствие точки с запятой всеравно меня ещё долго удивлять будет.

Arch
18.03.2018
08:33:10
Надеюсь GC когда - нибудь допилят чтобы он в рантайме подчищал мусор без остановки рантайма

Google
Yuriy
18.03.2018
08:34:12
Arch
18.03.2018
08:35:08
да, но зачем? (https://golang.org/pkg/runtime/#GC)

Yuriy
18.03.2018
08:35:49
да, но зачем? (https://golang.org/pkg/runtime/#GC)
Хз.... Но для чего-то функцию реализовали))

Mykyta
18.03.2018
08:35:55
Надеюсь GC когда - нибудь допилят чтобы он в рантайме подчищал мусор без остановки рантайма
В го concurrent mark and sweep gc, почитай как он работает, он делает очень маленькую паузу на фазе initial mark, а потом мусор собирает уже конкурентно



Arch
18.03.2018
08:37:16
В го concurrent mark and sweep gc, почитай как он работает, он делает очень маленькую паузу на фазе initial mark, а потом мусор собирает уже конкурентно
Да, я в курсе, но он делает эту паузу, я пробовал делать канал объектов из одной в другую горутину, в секунду через канал проходило порядка 10000к структур, в логе в терминале видно было остановку рантайма

Хз.... Но для чего-то функцию реализовали))
Для специфичных нужд. И для параноиков)

Mykyta
18.03.2018
08:38:51
Да, я в курсе, но он делает эту паузу, я пробовал делать канал объектов из одной в другую горутину, в секунду через канал проходило порядка 10000к структур, в логе в терминале видно было остановку рантайма
неизвестно как у тебя логгер еще устроен был, может у тебя io логгера просто блокировало главный поток сбрасывая какой нить буффер или прочую хрень

Arch
18.03.2018
08:40:28
неизвестно как у тебя логгер еще устроен был, может у тебя io логгера просто блокировало главный поток сбрасывая какой нить буффер или прочую хрень
Нет, логер стандартный, ошибок небыло, тк тест был синтетический и данные в структуру генирировались на лету. Это однозначно сборка мусора, тк через равные промежутки и видно было как память потребляемая приложением плавает

Вот сейчас над переиспользованием структур через sync.Pool вроде

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

Arch
18.03.2018
08:43:03
Но надо делать бенчи, что будет быстрее работать

Arch
18.03.2018
08:43:57
Это да, надо доп метод, который будет приводить структуру в порядок

ну когда ты гоняешь миллион тяжелых структур туда - сюда обратно, это может иметь смысл

Надо пробовать, пока руки не добрались, но в голове уже поселилось

FRD Official - Dmitriy
18.03.2018
08:56:30
типа чистый sql лучше?
Типа внизапна это DSL.

Michael
18.03.2018
08:57:07
не может быть)

FRD Official - Dmitriy
18.03.2018
08:58:13
не может быть)
Приколись?! Сам как узнал, еле пивом отпоили

Google
Michael
18.03.2018
08:59:10
а от sequel вообще скупая слеза побёгла

Yuriy
18.03.2018
09:54:15
Сложность в том, что структуру надо "очищать" после использования
?! Можете уточнить, что значит очищать?! Все поля в nil. Завершение горутин с этой структурой?! Вопрос относительно конкретной задачи: Использую websocket сервер. При подключении нового клиента создаётся структура, в которую передается ссылка на экземпляр клиентского коннекта. Ссылка на экземпляр структуры добавляется в map. При наступлении события клиентского дисконнекта я останавливаю все горутин в конкретной структуре, удаляю из map элемент со ссылкой на структуру с "отвалившимся" коонектом. Как я понял gc позаботится об остальном и дополнительно мне ничего делать не надо. Или не совсем так?!

Admin
ERROR: S client not available

Yuriy
18.03.2018
10:00:14
Так, так, мы говорили про пул структур, чтобы их не пересоздавать каждый раз, а создать и использовать по кругу
sync.Pool ?! Это необходимо для особых случаев требующих оптимизации или рекомендуется всегда когда множество стуртур. В моем случае это необходимо?!

Mykyta
18.03.2018
10:02:24
?! Можете уточнить, что значит очищать?! Все поля в nil. Завершение горутин с этой структурой?! Вопрос относительно конкретной задачи: Использую websocket сервер. При подключении нового клиента создаётся структура, в которую передается ссылка на экземпляр клиентского коннекта. Ссылка на экземпляр структуры добавляется в map. При наступлении события клиентского дисконнекта я останавливаю все горутин в конкретной структуре, удаляю из map элемент со ссылкой на структуру с "отвалившимся" коонектом. Как я понял gc позаботится об остальном и дополнительно мне ничего делать не надо. Или не совсем так?!
Суть в том, что бывает, что нам очень часто нам надо создавать много объектов, например какие-то DTO-структуры или прочее и в теории их срок жизни очень маленький, но они накапливаются и висят в памяти, пока их сборщик не соберет. Для этого придумали sync.Pool, он по случаю создает новый объект либо вытаскивает уже существующий, если его не собрал сборщик, а ты объект понасиловал и сбросил обратно в пул. Так вот, после возвращения обратно в пул, у тебя у объекта остаются все старые значения свойств и если ты его снова получишь из пула, он будет замусорен старыми значениями

Savely
18.03.2018
10:03:12
sync.Pool ?! Это необходимо для особых случаев требующих оптимизации или рекомендуется всегда когда множество стуртур. В моем случае это необходимо?!
Я недавно юзал sync.Map из go1.9. Сначала начитался, что мол лучше по классике через rwmutex, но потом всё переписал на sync.Map и оказалось проще и быстрей. Это так, просто к слову.

Конкретно sync.Pool не доводилось юзать.

Savely
18.03.2018
10:05:06
А бенчи вот тут есть: https://habrahabr.ru/post/338718/

Но для меня это было некритично.

Arch
18.03.2018
10:06:33
В плане писанины скорее.
» если у вас высоконагруженная (и 100нс решают) система с большим количеством ядер процессора (32+), вы можете захотеть использовать sync.Map вместо стандартного map+sync.RWMutex. В остальных случаях, sync.Map особо не нужен. порадовало))))

Savely
18.03.2018
10:07:27
» если у вас высоконагруженная (и 100нс решают) система с большим количеством ядер процессора (32+), вы можете захотеть использовать sync.Map вместо стандартного map+sync.RWMutex. В остальных случаях, sync.Map особо не нужен. порадовало))))
Я хз зачем вот такое пишут. Системные либы для того и делают, чтобы проще было. В итоге так и получилось, вместо постоянных блокировок-разблокировок, там всё в несколько строчек делается.

Mykyta
18.03.2018
10:10:17
» если у вас высоконагруженная (и 100нс решают) система с большим количеством ядер процессора (32+), вы можете захотеть использовать sync.Map вместо стандартного map+sync.RWMutex. В остальных случаях, sync.Map особо не нужен. порадовало))))
Ну он работает немного по-другому https://golang.org/src/sync/map.go?m=text Там внутри две мапы, одна dirty map[interface{}]*entry, а вторая как read atomic.Value И оптимизация за счет жонглирования данных между ними

Zver
18.03.2018
10:10:48
Я хз зачем вот такое пишут. Системные либы для того и делают, чтобы проще было. В итоге так и получилось, вместо постоянных блокировок-разблокировок, там всё в несколько строчек делается.
Sync.Map разрабатывался для многоядерных систем. Там он работает быстрей. Если потоков мало, то быстрей работаеет стандартный map с мютексом.

Google
Arch
18.03.2018
10:11:24
Кто-то рассказывал что синк мап хранит копию мапы, не очень хорошее решение для больших мап

Savely
18.03.2018
10:12:14
Arch
18.03.2018
10:13:01
Сэр слышал про copy-on-write ?
ну если не хватат капасити, то да ?

Alex
18.03.2018
12:15:27
Посоны, а что делать если я итерирую по массиву но мне не нужен индекс и у меня declared and not used

Arch
18.03.2018
12:16:39
замени имя переменной на нижнее подчеркивание _

Aleksandr
18.03.2018
12:16:41
_, val := range ...

Alex
18.03.2018
12:18:57
Вы лучшие! Пошёл про это подчеркиваниие гуглить

Arch
18.03.2018
12:23:07
Вы лучшие! Пошёл про это подчеркиваниие гуглить
а что про него гуглить, если надо что-то отправить в небытие - юзай _

Alex
18.03.2018
12:23:23
Уже прочитал. Это такой /dev/null :)

Zver
18.03.2018
12:29:53
Уже прочитал. Это такой /dev/null :)
Ошибки только туда не отправляйте.

Makkusu
18.03.2018
12:34:51
Всем привет! Подскажите как можно подобную структуру создавать или генерировать? type Resp struct { Key struct { // Данные в массиве } `json:"special_key"` } От сервера приходит ответ в JSON в формате { "special_key" : { "data" : data ... } } То есть ключ в ассоциативном массиве меняется исходя из того какой я ключ отправлю на сервер. Как это можно реализовать?

Aleksandr
18.03.2018
12:43:26
json.RawMessage + свой анмаршаллер

Страница 1293 из 1674