
Alexey
30.11.2017
09:14:41
Мне ща коллега сказал: Не говори GO пока не перепрыгнешь.

Andrey
30.11.2017
10:36:22
ребят как правильно рест готовить на го?

Ilya
30.11.2017
10:44:59
На go это чем-то отличается от других языков?

Александр
30.11.2017
11:18:48

Google

Александр
30.11.2017
11:19:11

Alexey
30.11.2017
11:19:13
роутинг + обработчики, чо там организовывать.

Александр
30.11.2017
11:19:42
для роута я использую github.com/julienschmidt/httprouter

Andrey
30.11.2017
11:20:01
Спасибо!

Александр
30.11.2017
11:20:38
router := httprouter.New()
router.Handler("GET", "/name", middleware(&handler.NameCollection{
DbConnect: db,
}))
router.Handler("POST", "/name", middleware(&handler.NameCreate{
DbConnect: db,
}))
router.Handler("PUT", "/name/:id", middleware(&handler.NameModify{
DbConnect: db,
}))
хотя в данном случаи :name не прокидывается :(

Андрюха (Ren)
30.11.2017
11:25:55
Посоны, возможно ли проверить была ли запись в log?

Александр
30.11.2017
11:27:31
посмотреть ошибки после запись в файл? :)

Андрюха (Ren)
30.11.2017
11:28:24
У меня в логи пишется информация о подписке или лайке, хочу повторы исключить не храня никакой инфы
так бы чекнул по нику в логе и вуаля

Александр
30.11.2017
11:28:56
плохая идея

Андрюха (Ren)
30.11.2017
11:29:03
посоветуй другую

Александр
30.11.2017
11:29:32
"У меня в логи пишется информация о подписке или лайке" может надо не в логе хранить, а в бд?

Google

Александр
30.11.2017
11:29:41
тогда на изи проверили бы
вилка не для супа, если говорить образно

Андрюха (Ren)
30.11.2017
11:30:47
да оно и понятно
но вот не хочется привлекать бд и все ))

Александр
30.11.2017
11:31:14
у вас информация о подписке или лайке еще где то еще храниться?

Андрюха (Ren)
30.11.2017
11:31:44
нет
только в лог выплевывает и дальше идет

Alexey
30.11.2017
11:32:01

Александр
30.11.2017
11:32:05
как вариант вы можете сделать map[string]bool и там хранить признак, но это уникальность до перезагрузки
типо после записи в лог, добавляем в map - "entityName" = true

Андрюха (Ren)
30.11.2017
11:32:44
а я еще не дошел до изучения мап )
но если это поможет, пойду почитаю

Alexey
30.11.2017
11:33:40
Если надо надёжно.

Александр
30.11.2017
11:35:00
type ExistEntity struct {
mx sync.Mutex
m map[string]int
}
func (ee *existEntity) Load(key string) (int, bool) {
ee.mx.Lock()
defer ee.mx.Unlock()
val, ok := ee.m[key]
return val, ok
}
func (ee *existEntity) isExist(key string) bool {
ee.mx.Lock()
defer ee.mx.Unlock()
if _, ok:= ee.m[entityName]; ok {
return true
}
return false
}
func (ee *existEntity) Store(key string, value int) {
ee.mx.Lock()
defer ee.mx.Unlock()
ee.m[key] = value
}
func NewChecker() *ExistEntity {
return &ExistEntity{
m: make(map[string]int),
}
}
exist := false;
checker := NewChecker()
entityName = "bravo"
for range existEntitys {
if checker.isExist() {
checker.Store(entityName, checker.Load(entityName))
exist = true;
}
}
if (exist == false) {
// тут пишем лог
checker.Store(entityName, 1)
}

Андрюха (Ren)
30.11.2017
11:35:22


Александр
30.11.2017
11:38:49
по синтаксису может и накосячил
p.s. exist == false да вижу :)

Google

Kirill
30.11.2017
11:40:41

Андрюха (Ren)
30.11.2017
11:41:06
ой нафиг, пусть лайкает повторно ?
Как говорил чей-то дед - работает - не трогай.

Александр
30.11.2017
11:41:48

Kirill
30.11.2017
11:43:40

Александр
30.11.2017
11:45:16
обращение к несуществующему элементу не будет, от этого нас страхует конструкция - if _, ok:= existEntity[entityName]; ok
которая как раз "поглащает" все ошибки

Kirill
30.11.2017
11:46:26

Александр
30.11.2017
11:47:15
ага, ну давайте мьютексы добавим, блокировки. Самый норм пример для новичков :)

Kirill
30.11.2017
11:48:07

Александр
30.11.2017
11:52:13

Андрюха (Ren)
30.11.2017
11:59:31
Парни закинул бинарник на сервер себе, по ssh включается, закрываю ssh - закрывается программа. Что сделать чтобы оно осталось запущенным?

Aleksandr
30.11.2017
12:00:02
но лучше сервис сделать

Александр
30.11.2017
12:00:36
понятный и простой пример для новичков
а главное потокобезопасный, даже при >1000 rps

Андрюха (Ren)
30.11.2017
12:01:15

Maxim
30.11.2017
12:01:53

nezorflame
30.11.2017
12:01:58
божечки

Google

Aleksandr
30.11.2017
12:02:12

nezorflame
30.11.2017
12:02:14
ну зачем exist == false когда есть !exist

Александр
30.11.2017
12:02:24

nezorflame
30.11.2017
12:02:33
...

Александр
30.11.2017
12:02:47
я хотел в этом примере сделать простой и понятный для новичков пример

Андрюха (Ren)
30.11.2017
12:03:22

Admin
ERROR: S client not available

nezorflame
30.11.2017
12:03:34
systemd
supervisor
подставь свое

Kirill
30.11.2017
12:03:39

Aleksandr
30.11.2017
12:03:48

nezorflame
30.11.2017
12:04:48
FYI

Александр
30.11.2017
12:05:19
о да!

nezorflame
30.11.2017
12:06:29
собственно https://medium.com/@deckarep/the-new-kid-in-town-gos-sync-map-de24a6bf7c2c

Александр
30.11.2017
12:06:40
собственно https://habrahabr.ru/post/338718/
народ вы что угораете? какие *бип* блокировки для новичков

Aleksandr
30.11.2017
12:10:04

Александр
30.11.2017
12:16:33
правильно говоришь
не знаю насколько правильно, но я стараюсь избегать конкруретной работы с файлом. Лучше в буферизированный канал свелить и из соседнего потока все спокойно записать. Особенно для логов

Google

Aleksandr
30.11.2017
12:17:05

Александр
30.11.2017
12:19:43
ну это да, реально пугаете народ
я про новичков
кстати, про буферизированные каналы. Я как понимаю буферизированные каналы отличаются от обычных, что забирают данные в себя и не лочат отправляющую горутину (в пределах буфера, после переполнения ведут себя как не буферизированные). В каких случаях мы тогда должны использовать не буферизированные? Почему бы нам не сделать буферизированные на 100000 и забить :)

Kirill
30.11.2017
12:52:46
Если консюмеры таких каналов будут медленнее продюсеров, система рано или поздно уйдет в out of memory

Александр
30.11.2017
12:54:01
ну если конечно 100000 это буфер которы в памяти не умещается
так то норм "погуляем" :)
приложение просто просядет по производительности, самым слабым звеном будет как раз "продюсеры"

Ilia
30.11.2017
12:57:17

Maxim
30.11.2017
12:58:40
Какой есть надёжный способ выпилить префикс схемы (http://, https://...) из строки с URL (hTTp://siTe.Ru/patH...)?
Регулярки медленные, трогать их не хочется. Регистр урла нужно сохранить, но префикс тоже может иметь разные комбинации регистров символов

Yaroslav
30.11.2017
13:01:24
регулярки для такой строки не долго же выполняються

Александр
30.11.2017
13:02:15
select же вычитывает 1 случайное значение

Дмитрий
30.11.2017
13:04:05

Maxim
30.11.2017
13:04:30
net/url ?
Нет возможности из-за возможного содержания какой-нибудь каши в пути

Ilia
30.11.2017
13:05:27

Дмитрий
30.11.2017
13:05:29
Таки да, тогда регулярка на ум приходит. А строка одна или пак их?

Ilia
30.11.2017
13:05:57
Иногда это может быть удобно, например сигналы всякие посылать