@proGO

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

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: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 МБ. Но через пару часов уже почти гигабайт. ОЗУ в системе, конечно ещё много, но тем не менее хотелось бы знать: Мусорщик сам потом почистит, когда система будет требовать освободить память или мне нужно это как-то зафорсить?

Google
Savely
31.10.2017
13:05:10
Скорей всего утекают каналы, гоуротины или другие ресурсы
А как это можно изучить вообще? У меня по сути в основной горутине две вещи происходит: http.Get и запись в базу через пакет gorethink.

Savely
31.10.2017
13:07:33
body закрываешь?)
Как-то так? defer res.Body.Close()

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.

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

Давид
31.10.2017
13:14:45
https://play.golang.org/p/DG7vpEnSv0

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
Похоже что нет))
посмотри ещё 50 shades of go

Там есть, как правильно закрывать body, а то можешь все равно встрять

Savely
31.10.2017
13:21:10
посмотри ещё 50 shades of go
Гляну, спасибо.

Там есть, как правильно закрывать body, а то можешь все равно встрять
Ты прав :D Чуток неверно закрывал. В большинстве кейсов срабатывал, но не всегда.

Ща всё ок, но опять тестить надо.

Vlad
31.10.2017
13:32:26

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