
Евгений
30.10.2017
19:18:19
все же остался один непОнятый вопрос: допустим один юзер два раза нажал на кнопку в телеграме, из-за тормозов сети эти запросы прилетели одновременно. Выполнение запроса зависит от текущего состояния в базе, и это запрос меняет это состояние. Первый запрос изменит значение в базе, и в торой сделает то же самое, потому что не знает ничего о первом запросе, который выполняется параллельно. Как разруливается такая ситуация? Принудительно все запросы от одного юзера загонять в один поток(канал) и обрабатывать по очереди?
Делать запросы идемпотентными. Условно говоря, если первый запрос меняет что-то, например, делает определенную страницу сайта опубликованной или переводит 100 рублей на счет Васе, то второй точно такой же запрос не должен ничего менять, а тем более ломать. Страница не должна перестать быть опубликованной, а Васе не должно отправиться еще 100 рублей.

Sergey
30.10.2017
20:08:18

Arch
30.10.2017
20:10:41
при чем тут мьютекс? если у вас два запроса подряд к одной ячейке данных?
Вам надо выполнить первый и отфильтровать второй

Google

Arch
30.10.2017
20:11:48
для этого собираем все запросы от персонажа и грохаем идентичные, после выполнения одного
реализация будет зависеть от структуры вашей программы
методов много, от персональной очереди, до мапа с запросами
но суть не изменна, один запрос выполнили, остальные проигнорили

Sergey
30.10.2017
20:13:53
А если это разные персонажи? Мьютекс хоть гарантирует что запрос не переключится на другой

Arch
30.10.2017
20:15:57
Ясное дело что персонажи разные, собирайте запросы в кучу и фильтруйте их, можно на основании времени, можно ид запросам присваивать, можно по типу, можно по значению, да вариантов масса.

عاصم بن حارث
30.10.2017
21:36:17
Если и база не вариант и про "встраиваемость" шатания какие-то, то:
Пишите на erlang, там из коробки ets (dets), можно и в mnesia (для особой жути).
Там и уникальность записей и быстрый поиск\сравнение, нормальная поточность, масштабируемость и прочее. (Ликбезов читать не буду,- инфа на поверхности). ДА и бота этого слепить "на коленке" проблем не вижу, уж тем более, что есть либы сторонние; только бери и напильником под себя точи.

Mike
30.10.2017
22:18:59
Гочат третий день обсуждает как написать простого бота.
Лол

عاصم بن حارث
30.10.2017
22:20:14

Taras ?
30.10.2017
22:27:00

عاصم بن حارث
30.10.2017
22:28:07

Vadiimmm:-)))
31.10.2017
06:21:28

Kirill
31.10.2017
06:29:45
Товарищи гоферы, а кто что использует для моков? https://github.com/golang/mock или есть другие решения куда лучше?

Google

KlonD90
31.10.2017
11:52:26
guys а вы в докер ложите свои штуки?
Какие best practice?

Roman
31.10.2017
11:53:29
guys?

Igor
31.10.2017
11:54:10
Все задумались: а вдруго и правда "ложут"

Aleksandr
31.10.2017
11:55:20

KlonD90
31.10.2017
11:55:43
Да как-то непонятно стоит ли добавлять ADD ~/go/lib /opt/go/lib
для каждой отдельной dependency

Roman
31.10.2017
11:56:40
если есть возможность, то собирай статический бинарник и в контейнер
вот собственно и все

KlonD90
31.10.2017
11:56:57
ну у меня же мак (
нужен отдельный шаг
чтобы забилдить этот бинарь

Aleksandr
31.10.2017
11:57:47

Roman
31.10.2017
11:57:52
ну купи ноут, поставь туда линукс
или в виртуалке
FROM golang:latest
ADD . /go/src/gitlab.com/myproject
WORKDIR /go/src/gitlab.com/myproject/cmd
RUN go get -d
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o myproject .
FROM alpine:latest
WORKDIR /root/
COPY —from=0 /go/src/gitlab.com/myproject/cmd .
CMD ["./myproject"]
EXPOSE 6667

KlonD90
31.10.2017
12:04:12
Спасибо

Илья
31.10.2017
12:04:15
/myproject

Roman
31.10.2017
12:04:27
ну да)

Alexey
31.10.2017
12:09:06
/myproject

Google

Lev
31.10.2017
12:09:33
кому еще проект нужен?)

Roman
31.10.2017
12:10:39
/myproject

Alexander
31.10.2017
12:11:43
/myproject

Давид
31.10.2017
12:13:29
/myproject

illiatshurotshka❄️
31.10.2017
12:13:43
/myproject

Vlad
31.10.2017
12:13:59
/myproject

Андрюха (Ren)
31.10.2017
12:14:04
/myproject

Roman
31.10.2017
12:14:11
понеслась)

Давид
31.10.2017
12:14:13
?

Андрюха (Ren)
31.10.2017
12:14:24
Ну бесплатно ж

Kirill
31.10.2017
12:14:40
Больше проектов богу проектов!

Давид
31.10.2017
12:14:48
а что бесплатно то?

Давид
31.10.2017
12:15:13
я думал мы флешмоб устроили

Roman
31.10.2017
12:15:36
предполагаю, что участие во флешмобе бесплатное

Давид
31.10.2017
12:15:52
аааа
ок

Eldar
31.10.2017
12:15:55
)))))

Андрюха (Ren)
31.10.2017
12:16:01
Вы чего, это ж бесплатный проект без регистрации и смс

Savely
31.10.2017
12:59:25
Народ, вопрос такой. У меня есть достаточно простая программа на Go, которая каждую минуту запускает примерно 300 горутин. Они все быстро выполняются и так опять через минуту. Сами горутины это по сути веб-запросы и запись в базу изменений полученных.
Вопрос по памяти: Запускаешь жрет примерно 5 мб. После первой минуты около 100 МБ. Но через пару часов уже почти гигабайт. ОЗУ в системе, конечно ещё много, но тем не менее хотелось бы знать: Мусорщик сам потом почистит, когда система будет требовать освободить память или мне нужно это как-то зафорсить?

Igor
31.10.2017
13:02:06

Google

Savely
31.10.2017
13:05:10

Aleksandr
31.10.2017
13:06:04

Savely
31.10.2017
13:07:33

Admin
ERROR: S client not available

Savely
31.10.2017
13:07:38
Похоже что нет))

Aleksandr
31.10.2017
13:07:41
да

Vladimir
31.10.2017
13:08:33
Собери heap profile

Savely
31.10.2017
13:08:34
да
А еще есть подобные нюансы с http.Get?
Результаты запросы в базу точно закрываю.

Vladimir
31.10.2017
13:08:41
И посмотри где что как зачем

Savely
31.10.2017
13:09:03
Сейчас посмотрю как будет ОЗУ себя вести с закрытым body.

Aleksandr
31.10.2017
13:09:15

Savely
31.10.2017
13:13:57
отпишись, интересно
После 5 обновлений выше 185 метров не растет. Посмотрю что через часик будет.

Давид
31.10.2017
13:14:45
https://play.golang.org/p/DG7vpEnSv0
в чем может быть причина и как исправить?
0, 1, 2 ведуь себя неправильно

nezorflame
31.10.2017
13:16:23
почему же неправильно
остаток от деления 0 на 3 равен остатку от деления на 5
то же самое верно для 1 и 2
а также для 16 и 17

Google

nezorflame
31.10.2017
13:17:02
ну и тд

Давид
31.10.2017
13:17:55
для ноль поведение верное
а все
все

nezorflame
31.10.2017
13:18:11
:)

Давид
31.10.2017
13:18:53
а можно както чтоб он их без Fizzbuzz выводил но без костылей?

nezorflame
31.10.2017
13:19:32
а в чем смысл-то
проверить остаток деления на 15?

Vlad
31.10.2017
13:20:42
Там есть, как правильно закрывать body, а то можешь все равно встрять

Savely
31.10.2017
13:21:10
Ща всё ок, но опять тестить надо.

Vlad
31.10.2017
13:32:26