@gogolang

Страница 884 из 1630
Viacheslav
05.03.2018
08:11:54
на го не писал? Не синьёр!

Vladimir
05.03.2018
08:12:02
Вот только твоего одобрения мне и не хватало ???
Рад что ты теперь смог закрыть этот гештальт

Viacheslav
05.03.2018
08:12:09
дал б.г гошечку даст и перфоманс! (с)

Constantine
05.03.2018
08:12:44
и дженерики

Google
/dev/null
05.03.2018
08:13:03
Здаров ребят., вот только начал пробовать монгу и узнаю, что разработчик mgo перестал его поддерживать Кто на что перебрался?

Yura
05.03.2018
08:13:21
Рад что ты теперь смог закрыть этот гештальт
Спасибо тебе неизмеримое. Наконец-таки могу вздохнуть с облегчением.

Alexander
05.03.2018
08:17:19
Andrew
05.03.2018
08:17:55
boltdb же
json.Marshal слайса с базой же!

Vladimir
05.03.2018
08:18:17
json.Marshal слайса с базой же!
Отличный вариант!

Alexander
05.03.2018
08:18:40
json.Marshal слайса с базой же!
схоронил в файлик "best_practices.txt"

Andrew
05.03.2018
08:18:56
Отличный вариант!
1. pure Go 2. Нет зависимостей 3. Однострочник 4. Брат жив

Yura
05.03.2018
08:20:02
boltdb же
Месье знает толк. BTW, из присутствующих кто полноценно использует boltdb в разработке (т.е. не посредством etcd и других сторонних библиотек/приложений, а напрямую)? Поделитесь опытом

Maxim
05.03.2018
08:20:48
Не дай бог ещё забудешь проверить на ошибки или отсутствие значения

Google
Daniel
05.03.2018
08:21:15
погоди

Maxim
05.03.2018
08:21:15
Короче - гемор

Daniel
05.03.2018
08:21:32
boltdb - известный тормоз, особенно на запись

Yura
05.03.2018
08:21:49
Maxim
05.03.2018
08:22:11
boltdb - известный тормоз, особенно на запись
В моём проде записи довольно редко случаются

Daniel
05.03.2018
08:22:28
и все данные в память влезли, небойсь

тогда да, будет быстро

Alexander
05.03.2018
08:22:37
Быстро, конечно, но задолбаешься конвертировать данные в байты и обратно
обвязки всякие есть, для улучшайзинга и удобства. еще форк какой-то был, с новыми фичами

Kirill
05.03.2018
08:23:10
Кто-нибудь собирается на 2018.codefest.ru ?

https://2018.codefest.ru/

Yura
05.03.2018
08:26:15
и все данные в память влезли, небойсь
Даже если не влезли, btree пока-что самый быстрый способ искать данные на диске, и все lsm адепты это признают. (Ок, может и есть более лучшие способы, но они гораздо менее популярны чем btree и lsm). Правда, при определенных условиях итерация по lsm может быть быстрее, это правда.

Daniel
05.03.2018
08:28:35
если не влезли - будет как у всех

Pawel
05.03.2018
08:42:01
и дженерики
round же дали в 1.10 по просьбам трудящихся, глядишь и дж..в подкинут

boltdb же
sqlite же если не хочешь в постгрес

то ли я тупой, то ли гвозди, но с boltdb почему то всегда всё, кроме самого простого, получается на много хуже, чем с любым SQL - и тормозит, и говнокода много

Daniel
05.03.2018
08:49:03
это не болт, это KV такие

Pawel
05.03.2018
08:49:15
да, конечно

Nick
05.03.2018
08:50:42
Кстати интересно, а что если бы автор той статьи попробовал azul с профилем оптимизации

Viacheslav
05.03.2018
08:54:24
у автора статьи цель другая была

Phil
05.03.2018
09:22:54
Google
Kirill
05.03.2018
09:23:47
Phil
05.03.2018
09:24:21
Хито?

Andrew
05.03.2018
09:25:15
А кто не тормоз?
/dev/null. Я сам офигел - скорость записи упирается в скорость чтения из любого источника!

Pawel
05.03.2018
09:33:34
у автора статьи цель другая была
это был наброс за бесовский Го против православной Скалы. ни кто в этом не сомневается

Kirill
05.03.2018
09:35:22
Phil
05.03.2018
09:37:22
Я просто токен oauth2 сервер сделал. И он на boltdb. Но пока не пробовал в проде

Daniel
05.03.2018
09:45:59
для твоих целей оно ок

Andrey
05.03.2018
10:33:40
Всем привет. 2 Вопроса тем, кто использует vscode. Использую тэги в го "-tags". 1. Как сделать так чтобы отладчик запускался с определёнными тэгами? С компиляцией проблем нет. таски настроил. Что надо пропистаь в launch.json? Мне надо дебаггером по тесту пройтись. { "version": "0.2.0", "configurations": [ { "name": "Launch", "type": "go", "request": "launch", "mode": "test", "remotePath": "", "port": 2345, "host": "127.0.0.1", "program": "${workspaceRoot}", "env": {}, "args": [], "showLog": true } ] } 2. Как сделать чтобы линтер теги видел?

Kirill
05.03.2018
10:37:15
Как интегрируете?
форкаем и используем только нужное

стартуем ноду без http апи и тд

Aleksandr
05.03.2018
10:41:47
коллеги, есть несколько воркеров, получающих задания из продьюсера, который кидает задания в канал. Внутри воркера получаю задания вот таким манером: for { select { case task := <-crawler.tasks: // chan *Task log.Printf("Task: %v", task) crawler.handleTask(task) case <-crawler.workersStop: return } } сейчас наблюдаю как из канала приходит сначала нормальный Task, а в другом воркере nil, причем продьюсер отправил в канал только первый таск. Это какая-то гонка?

Yura
05.03.2018
10:46:23
badgerdb
Пока багнутый. Ну и, честно подразумевает, что у вас ssd. В том смысле, что значения больше порога не хранятся в lsm, а значит, скорее всего, итерация обернётся рандом-ридом. Тот же boltdb кладёт значения in-place, и итерация будет быстрее. Но вот мне потребовалось перелопатить 800GB данных, взял амазоновский инстанс с быстрым nvme, отключил fsync, и job done. Thank you, badgerdb.

Aleksandr
05.03.2018
10:47:22
каналы потокобезопасны, ищите ошибку в коде отправки сообщения
вот мне так же казалось. но у меня одно место отправки в канал и дебаг показал что он один раз вызывается

вот мне так же казалось. но у меня одно место отправки в канал и дебаг показал что он один раз вызывается
task.Status = taskStatusInProcess crawler.tasks <- task причем такой код исключает что в канал попадет nil.

Denis
05.03.2018
10:53:28
и как такой код что то может исключать?
там кстати, вот так лучше go crawler.handleTask(task)

Zver
05.03.2018
10:53:31
Andrei
05.03.2018
10:54:13
там кстати, вот так лучше go crawler.handleTask(task)
он уже внутри отдельной горутины получает задачу, зачем еще одну плодить?

Google
Aleksandr
05.03.2018
10:54:40
и как такой код что то может исключать?
обращение к task.Status - запаникует ели там nil (но на самом деле чуть выше task явно создается)

там кстати, вот так лучше go crawler.handleTask(task)
это у меня уже внутри отдельной горутины-воркера

Denis
05.03.2018
10:55:23
потому что этот task crawler.handleTask(task) заблокирует цикл а если там сотня сразу свалится запросов?

Andrei
05.03.2018
10:55:27
обращение к task.Status - запаникует ели там nil (но на самом деле чуть выше task явно создается)
скиньте ключевые участки в goplayground, пока что это гадание на гуще

потому что этот task crawler.handleTask(task) заблокирует цикл а если там сотня сразу свалится запросов?
прежде чем давать советы следует хотя бы прочитать предыдущие сообщения...

Admin
ERROR: S client not available

Aleksandr
05.03.2018
10:56:23
Может быть закрыли канал? Скиньте в плэйграунд.
а если закрыл канал, прилетит оттуда nil? я просто закрываю после того как убиваю все воркеры, поэтому кажется не должно влиять

Andrei
05.03.2018
10:57:18
если ok == false, то канал уже был закрыт

Aleksandr
05.03.2018
10:58:30
если ok == false, то канал уже был закрыт
точно, канал закрыт. спасибо. дальше разберусь

Pawel
05.03.2018
11:06:08
это у меня уже внутри отдельной горутины-воркера
всё равно лучше запускать handleTask в отдельной горутине, чтобы цикл for перешёл к следующей итерации по возможности быстрее

Aleksandr
05.03.2018
11:11:02
всё равно лучше запускать handleTask в отдельной горутине, чтобы цикл for перешёл к следующей итерации по возможности быстрее
Но мне это как раз не нужно. У меня n воркеров выполняют n заданий. Выполнил - приступил к следующему.

Pawel
05.03.2018
11:11:22
а

а канал с какой целью закрываете?

ainu
05.03.2018
11:17:52
Клевый канал, лучший в телеграмме по Go, не надо закрывать

Kirill
05.03.2018
11:18:13
ор

Ruslan
05.03.2018
11:19:25
Хех

Kirill
05.03.2018
11:19:42
Кто-нибудь поедет на codefest?

Google
Aleksandr
05.03.2018
11:25:50
а канал с какой целью закрываете?
Канал закрываю после закрытия воркеров при шатдауне приложения. Видимо почему то канал закрывается раньше чем тушится воркер. Переделаю этот момент

Pawel
05.03.2018
11:40:48
Канал закрываю после закрытия воркеров при шатдауне приложения. Видимо почему то канал закрывается раньше чем тушится воркер. Переделаю этот момент
я к тому, что канал же не файл, его закрывать не обзательно, утечек ресурсов это не создаст, тем более при закрытии приложения. Наксколько я понял из tour of go, канал закрывают исключительно для того, чтобы послать своеобразный сигнал о прекращении работы внутрь for { select {...}} , но у вас для этого специалльный стоп-канал есть

Sergey
05.03.2018
11:55:24
Всем привет, пишу api сервер для мобильного приложения, уперся в вопрос аутентификации пользователя, читал много всего, мнения розняться, так что лучше для этого использовать? Какую то свою реализацию(выдавать пользователю рефреш и acess токены и хранить их в redis) или использовать что то готовое, как я понима в oauth2 смысла никакого нет, так это не публичное api, напривьте кто шарит, что лучше или куда смотреть.

Alexander
05.03.2018
11:56:57
2-legged oauth2 - это вот прямо то, что нужно

> выдавать пользователю рефреш и acess токены и хранить их в redis В общем-то это почти oauth2 и есть, в простом варианте

Daniel
05.03.2018
11:57:53
https://jwt.io/introduction/

Sergey
05.03.2018
11:58:16
Понял, почитаю и про то и про то, спасибо)

Oleg
05.03.2018
14:47:06
Подскажите пож как реализовать подобное. Мне необходимо на один endpoint повесить несколько экшенов, ко мне приходит GET-request по адрессу /requests/ /requests/123123 /requests/abcdefg И для каждого из них мне необходимо вызывать различные хэндлеры как можно реализовать такое ? разница между вторым и третьем лишь в том, что во втором будет uint, а в третьем string

Aleksandr
05.03.2018
14:49:37
проверять req.Path, в зависимости от пути подсовывать разные хэндлеры

Oleg
05.03.2018
14:52:55
так путь каждый раз будет другим, у меня есть идея лишь в том, чтобы парсить в middlewares и из неё раскидывать по хэндлерам

Pawel
05.03.2018
14:56:10
либо используйте маршрутизатор с регэкспами, например, chi: r := chi.NewRouter() r.Route("/requests", func(r chi.Router) { r.Get("/", ...) // GET /requests r.Get("/{[0-9]+}", ...) // GET /requests/123123 r.Get("/{[A-Za-z]+}", ...) // GET /requests/abcdefg })

Aleksandr
05.03.2018
15:06:41
так путь каждый раз будет другим, у меня есть идея лишь в том, чтобы парсить в middlewares и из неё раскидывать по хэндлерам
и? вешаешь хэндлер на requests. Проверяешь Path. В зависимости от условий, подсовываешь другой хэндлер.

пересказал второй раз, что первый раз написал

Kirill
05.03.2018
16:33:32
хттп, тсп, юдп хттп сервер наверно самый тяжелый из них, а тсп юдп относительно друг друга как? в го

Zaur
05.03.2018
16:34:45
В смысле тяжёлый?

Страница 884 из 1630