
Александр
11.07.2018
08:56:50
я про свойства

Sergey
11.07.2018
08:57:45
Как лучше сделать тестирование функций создающих таблицы в БД?
Отдельный конфиг с данными для подключения к тестовой базе?
В тестах немного опыта, интерсено мнение опытных гоферов.

The
11.07.2018
08:57:58
Немного непонятно просто
пример сложно описать, там много кода на самом деле. просто представь себе три пакета: модели, коллекции, и репозиторий. модели - это структуры, коллекция - интерфейс для работы с множеством моделей, репозиторий - сохраняет/извлекает модели и создает из них множества(коллекции).

Александр
11.07.2018
08:58:46

Google

The
11.07.2018
09:02:38
репозиторий (допустим метод Query который выбирает откуда-то данные) делает так:
c := NewProductCollection()
// например, делаю выборку из базы
for rows.Next() {
c.Push(model.Product)
}
c.Lock() // блокирую коллекцию от изменений
return c // возвращаю коллекцию, и её могут только читать
в другом месте c.Unlock() сделать не получится, т.к. заблокирована она была на этапе создания, тоже самое, когда мы хотим сохранить коллекцию в базу, мы допустим вычитали тело запроса из JSON, создали коллекцию и запушили туда наши модели, и сразу заблокировали, и передали это все в репозиторий, который может только прочитать из этой коллекции.

Sergey
11.07.2018
09:03:58

Alexander
11.07.2018
09:04:58


Zaur
11.07.2018
09:05:19
репозиторий (допустим метод Query который выбирает откуда-то данные) делает так:
c := NewProductCollection()
// например, делаю выборку из базы
for rows.Next() {
c.Push(model.Product)
}
c.Lock() // блокирую коллекцию от изменений
return c // возвращаю коллекцию, и её могут только читать
в другом месте c.Unlock() сделать не получится, т.к. заблокирована она была на этапе создания, тоже самое, когда мы хотим сохранить коллекцию в базу, мы допустим вычитали тело запроса из JSON, создали коллекцию и запушили туда наши модели, и сразу заблокировали, и передали это все в репозиторий, который может только прочитать из этой коллекции.
Если у тебя всё и так через интерфейс, почему нельзя просто использовать какой-нибуль флаг в структуре?
Потом реализовать сами функции с проверкой флага и с возвращением ошибок
Моя не понимать
Моя пас

V
11.07.2018
09:11:38

Антон
11.07.2018
09:12:19
Зачем имитировать иммутабельность в языке, если можно просто взять язык, который её поддерживает с самого начала?

Илья
11.07.2018
09:16:26

The
11.07.2018
09:17:14


Илья
11.07.2018
09:17:27
репозиторий (допустим метод Query который выбирает откуда-то данные) делает так:
c := NewProductCollection()
// например, делаю выборку из базы
for rows.Next() {
c.Push(model.Product)
}
c.Lock() // блокирую коллекцию от изменений
return c // возвращаю коллекцию, и её могут только читать
в другом месте c.Unlock() сделать не получится, т.к. заблокирована она была на этапе создания, тоже самое, когда мы хотим сохранить коллекцию в базу, мы допустим вычитали тело запроса из JSON, создали коллекцию и запушили туда наши модели, и сразу заблокировали, и передали это все в репозиторий, который может только прочитать из этой коллекции.
в вашей архитектуре - можно сделать сбор слайса продуктов, и инициализацию иммутабельной коллекции из слайса
и тогда получится то, что вы хотите

Google

Илья
11.07.2018
09:18:14
но все это пахнет джавой и плохим дизайном, на мой вкус

Zaur
11.07.2018
09:19:04
Изи

The
11.07.2018
09:20:40
да, действительно изи) ладно, может и без иммутабельности запилю, спасибо

Alexandr
11.07.2018
10:03:45

Den
11.07.2018
10:17:52
Или sync.Map
Он блокирует всю мапу? Т.е. у меня горутина пишет в одну ячейку. Мне не надо блокировать всю мапу целиком а только эту ячейку...

V
11.07.2018
10:19:14
вопрос что у вас будет при изменении размера мапы с ключиком, я не готов ответить. преждевременная оптимизация - зло

Lesha
11.07.2018
10:23:35

Sergey
11.07.2018
10:24:43

Lesha
11.07.2018
10:25:20
она умная.
не настолько умная, что бы при записи не блокировать всю мапу

Den
11.07.2018
10:25:40

Sergey
11.07.2018
10:25:49

Lesha
11.07.2018
10:27:17

Den
11.07.2018
10:29:00
Да меня больше наверно интересует 2 вопроса: 1. Почему происходит блокировка? Ведь это тот же массив, я могу читать и писить в ячейку одним потоком без блокировки если другие пишут в другой
В другие ячейки

V
11.07.2018
10:30:42
потому что во время чтения и записи возможен вызов косвенных операций, которые приводят к ошибкам при несинхронизированном вызове

Vladimir
11.07.2018
10:30:46
Сам же ссылку дал

Google

Lesha
11.07.2018
10:31:58
для некоторых случаев

Vladimir
11.07.2018
10:33:33

Lesha
11.07.2018
10:33:37
но энивей там блокируетя на запись вся мапа

Илья
11.07.2018
10:37:09

Anna
11.07.2018
11:53:51
#работа #remote
Всем привет!
Ищу экспертов с большим практическим опытом в GO, готовых передавать свои знания другим! Занятость преподавателя складывается из проведения вебинаров и проверки домашних заданий студентов. И то, и другое оплачивается.
Продолжительность одного курса -около 5 месяцев. Преподавать можно в любой точке мира, без отрыва от основной работы. Есть вариант записи видеокурса. От вас не требуется опыт преподавания, мы с удовольствием и бесплатно научим вас учить!
С радостью отвечу на все вопросы. Лучше в личку

Kirill
11.07.2018
13:46:03

Alexander
11.07.2018
14:36:17
Ребят, хочу написать свою небольшую KV БД, что от нее требуется
1) возможность insert/delete, update не нужен
2) очень быстрая запись
3) индекс по ключу
4) возможность "постраничной" подгрузки в память, чтобы не держать все в RAM
существующие решения какой-то оверхед
что можно почитать? с чего начать?

Kirill
11.07.2018
14:38:00

Anton
11.07.2018
14:38:14

Kirill
11.07.2018
14:38:55
ошизенный ответ %))
на ноду сколько? лям? 10? 100? 10 тысяч? 100 тысяч?

Alexander
11.07.2018
14:40:02
соре

Kirill
11.07.2018
14:40:34

Alexander
11.07.2018
14:40:58

Google

Kirill
11.07.2018
14:41:37

Alexander
11.07.2018
14:43:11
Мне конечно очень стыдно, но я не могу ответить на этот вопрос

Kirill
11.07.2018
14:43:41
да забей на "стыдно", пойди погугли и выбери

Dmitry
11.07.2018
14:48:53

Admin
ERROR: S client not available

Alexander
11.07.2018
15:00:22
Чисто из интереса, какие решения вы смотрели?
badger, buntdb
badger - не нужные мне MVCC, + кажется очень громоздким и тяжелым, быстро работает на многопоточности
buntdb - тоже отличная база, очень быстрая на запись, не нравится что ключ-значение только строки, и надо конвертить в строка-слайс-байт и обратно при хранении, + медленно работает на многопоточности. На одном потоке работает сильно быстрее чем badger по моим тестам. Куча индексов, которые мне не нужны

Dmitry
11.07.2018
15:05:51

Alexander
11.07.2018
15:08:58

Zaur
11.07.2018
16:08:31
А как на счёт leveldb?

Alexander
11.07.2018
16:27:09

Человек
11.07.2018
17:03:35
Здравствуйте, как можно выделить память через kernel32.NewProc("VirtualAlloc"), я просто в сисколах не разбераюсь и не знаю какие нужны аргументы для сискола

Kirill
11.07.2018
17:18:54

Человек
11.07.2018
17:20:58

Kirill
11.07.2018
17:26:24
Это запрещено делать на вин10 uwp

Иван
11.07.2018
17:27:06
все можно сделать

Kirill
11.07.2018
17:27:29
можно, но на uwp нет virtualalloc

Google

Kirill
11.07.2018
17:27:47
вопрос - -н-а-х- зачем?

Человек
11.07.2018
17:35:24
вопрос - -н-а-х- зачем?
не знаю, сначала думал быстро увеличить allocation для повышения производительности хоть в golang стоит garbage collector

11.07.2018
17:37:25
если я буду из нескольких горутин работать с мапой без мьютекса - будет плохо?

Vadim
11.07.2018
17:44:14

Daniel
11.07.2018
17:45:04

Иван
11.07.2018
17:45:56
Посоветуйте материал для обучения

Антон
11.07.2018
17:46:09
Да, может быть плохо
Эх, если бы только был язык, который предотвращал подобные ошибки на этапе компиляции. Но это только мечты...

Daniel
11.07.2018
17:46:19

Антон
11.07.2018
17:46:39

Daniel
11.07.2018
17:46:53

Антон
11.07.2018
17:47:33

Человек
11.07.2018
17:49:11
Кстати насчет ошибок чтоб 100500 раз не компилировать вроде бы в Visual Studio есть плагин который отслеживет ошибки, как только ты сохраняешь файл ctrl+s у тебя подствечиваетася зеленым или красным (красным там где ошибка) оооочень полезный плагин

Daniel
11.07.2018
17:49:12
В первой яве все структуры данных были обложены мутексами. К 1.2 пришлось написать параллельные реализации, без мутексов. Очень тормозило...

Антон
11.07.2018
17:51:12

Alexander
11.07.2018
17:51:42